:: Visual Foxpro, Foxpro for DOS
Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Приветствую всех!
Подскажите, как получить данные по HTTPS-запросу.
Известно:
URL
HTTP-метод GET
Параметры запроса:
key Ключ доступа
name Название
xml Получить ответ в формате XML
Схема ответа json-схема
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Также как и по HTTP-запросу
Первая попавшаяся заготовка для экспериментов вот здесь например: forum.foxclub.ru
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Да вроде все так и делаю:
cUrl="https://..."
loHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
loHttp.Option(6) = .f.
loHttp.Open("GET", cUrl, .F.)
loHttp.Send()
Но на loHttp.Send() выходит ошибка "Не удается установить соединение с сервером", хотя в браузере такой запрос отрабатывает:
"https://...?key=...&name=...&xml"

В чем может быть причина??
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Подставьте заведомо рабочий адрес, работает ли в принципе...

Вот так работает
CLEAR
cUrl="https://ya.ru" && если "https://ya.ru?hello", то будет ошибка на Send - неверный адрес...
loHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
loHttp.Option(6) = .f.
loHttp.Open("GET", cUrl, .F.)
loHttp.Send("hello")
?loHttp.Status
* ?loHttp.GetAllResponseHeaders()
?LEFT(loHttp.ResponseBody, 100)
loHttp = .NULL.

А вот так работает и с строкой с вопросиком (взято из той же ссылки)



Исправлено 2 раз(а). Последнее : of63, 04.04.18 13:09
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
msdn.microsoft.com
Там достаточно много разных настроек требуется. В зависимости от используемого протокола (по умолчанию включены SSL2 и SSL3, оба считаются на сегодня небезопасными и "устаревшими", а вот их замена TLS как раз не включена), от сертификата удалённого сервера (может быть он помещён вручную в "доверенные" в браузере, но не помещён в системе - особенно если это какой "самодельный" сертификат, не из одного из мировых центров сертификации), от необходимости в предоставлении клиентского сертификата (т.е. в подтверждении своей идентичности клиентом - это тоже браузер вполне может "прозрачно" делать)...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Вот так метод send отрабатывает, но возвращает ошибку No valid key specified:
ohttp = CREATEOBJECT("Msxml2.XMLHTTP")
cUrl="https://..."
ohttp.open("GET",cUrl,.T.)
oHTTP.SetRequestHeader("Content-Type", "application/json")
lcContent='{"key":"123456","name":"Петров Иван Иванович","xml"}'
oHttp.Send(lcContent)
Или я неправильно параметры задаю?
Впрочем, oHttp.Send() дает такой же результат.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Что-то указывать в Send имеет смысл, если передается методом POST (а не GET).
Без конкретики (адрес, спецификация обмена) нельзя что-то сказать, и не видно что за ошибка (программная, или сервер ответил...)
Например, вот так POST успешно уходит в ya.ru, он чем-то отвечает.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Вот конкретная ссылка, которая работает в браузере, но не получается выполнить запрос в программе:
"https://focus-api.kontur.ru/api3/pepSearch?key=...&fio=Капанина Наталья Владимировна&xml"

Тут параметры key, fio, xml



Исправлено 1 раз(а). Последнее : lili, 05.04.18 15:42
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Сервер нормально отвечает, малозначащей xml-строкой, такой же, как и в браузере... А надо какой?



Исправлено 1 раз(а). Последнее : of63, 05.04.18 15:05
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
oHttp = CREATEOBJECT("Msxml2.XMLHTTP")
cUrl="https://focus-api.kontur.ru/api3/pepSearch?key=********************&"+ "fio=%D0%9A%D0%B0%D0%BF%D0%B0%D0%BD%D0%B8%D0%BD%D0%B0+%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F+%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%BD%D0%B0&xml"
oHttp.open("GET",cUrl,.F.)
oHttp.Send()
? oHttp.responseText

И всё работает...

Параметры передаваемые в заголовке запроса должны быть URL-закодированы. В частности тут закодировано твоё тестовое ФИО. Если нужен ответ в xml виде, то документация говорит о том что надо использовать параметр xml (его значение судя по всему не важно, важен сам факт наличия). Без него тоже работает, но ответ приходит в json формате.
Асинхронный запрос тут не требуется, заголовок Content-Type для GET запроса тоже. А документация как раз про GET запросы и говорит.
Ключик, я так понимаю, это конфиденциальный элемент, потому исправь своё сообщение чтобы его не светить.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Асинхронный запрос тут не требуется (open("GET",cUrl,.T.)...)
Если сервер вообще не ответит, то .Send() будет ожидать его бесконечно, мтк.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Не уверен что "бесконечно" - таймауты есть по большинству стадий запрос-ответа. Хотя если сервер будет намеренно отдавать по 1 байтику в минуту, то наверное такой код "зависнет".
Автору бы для начала с базовой частью разобраться Не смешивать в кучу GET/POST, заголовок и тело запросов, научится их верно кодировать, расшифровывать ответ (особенно если он таки будет не чисто русскоязычный)...
P.S. Тебе бы тоже подправить свой пример на предмет маскировки ключа...


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 05.04.18 15:01
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Большое спасибо! Теперь действительно работает.
Мне бы еще ссылочку как "научиться их верно кодировать", если вас не затруднит.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> ...научиться их верно кодировать...
Звучит, примерно как "верно управлять велосипедом": падаешь влево - крути руль влево, и т.п

Основная идея - посылаем строку запроса к серверу, сервер возвращает текст.
2 вида запроса:
- GET - параметры запроса приделаны к адресу через знак вопроса
- POST - адрес передается "чистый", параметры запроса передаем в .Send
Заголовки запроса - дополнительные указания серверу.
...
* Обьект для HTTP-обмена с сервером (см. xmlhttprequest.ru или ru.wikipedia.org)
Кодировать (URL-кодирование) - вот тут кодировали forum.foxclub.ru



Исправлено 1 раз(а). Последнее : of63, 05.04.18 16:29
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Всем спасибо! Разобралась.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 432
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
В продолжение темы.
На некоторых машинах при выполнении запроса выходит сообщение о невозможности проверить отзыв сертификата (см. вложение), жмем "Да" и работаем. Но хотелось бы от этого избавиться. Вопрос в том, как это сделать и почему не на всех машинах в сети выходит такое сообщение. Скажу сразу, что в сертификатах я не сильна, поэтому прошу объяснить подробнее.
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
lili
В продолжение темы.
На некоторых машинах при выполнении запроса выходит сообщение о невозможности проверить отзыв сертификата (см. вложение), жмем "Да" и работаем. Но хотелось бы от этого избавиться. Вопрос в том, как это сделать и почему не на всех машинах в сети выходит такое сообщение. Скажу сразу, что в сертификатах я не сильна, поэтому прошу объяснить подробнее.

Какие-то проблемы с разной возможностью чего-либо через веб могут быть связаны с разными настройками браузеров и разрешений доступа в яве. Т.е. проще всего сравнить два компьютера на этот предмет - для нужного сайта должны быть отменены запреты, на всплывающие окна как минимум, а часто и на все остальное. Аналогично и в настройках установленной явы найти и разрешить данный сайт.
Разумеется надо изначально не забыть добавить сертификат в хранилище браузера, место добавления как правило зависит от используемого браузера, если зайти в настройки, у каждого есть своя закладка для сертификатов. Если используется автоматизация, видимо это IE, там и добавлять.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
В IE галочка есть в настройках: www.makak.ru
Ratings: 0 negative/0 positive
Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
lili
На некоторых машинах при выполнении запроса выходит сообщение о невозможности проверить отзыв сертификата (см. вложение), жмем "Да" и работаем. Но хотелось бы от этого избавиться. Вопрос в том, как это сделать и почему не на всех машинах в сети выходит такое сообщение.

blogs.msdn.microsoft.com

У вас есть системный администратор? Это сфера его компетенции.

Сертификаты разные бывают - некоторые с онлайн проверкой списков отзыва (это лучший вариант), некоторые только с crl файлами (по бедности или рукожопости - особенно если речь идёт про всякие "самодельные" сертификаты, которые выпускаются вообще без наличия официального "центра сертификации", или наши "государственные" центры сертификации). При том стороной выпускающей сертификаты настраивается как часто "протухает" соответствующий crl, т.е. как часто его нужно заново скачивать и устанавливать в систему.

Ни к какой яве, или к "несоответствию адреса сертификата" данная ошибка отношения не имеет. Максимум что можно сделать со стороны IE, это отключить "Check for server certificate revocation" - но это может помочь только с частью общения по HTTPS, да и то только касаемо "серверного" сертификата.
В самом IE, впрочем, по умолчанию такого рода ошибки не являются фатальными - они лишь предупреждения показывают, а не такого рода окна - но может быть при работе через XMLHTTP таки окна и будут лезть.

Если речь про всё тот же сервер kontur.ru - у них вполне адекватный сертификат, он выпущен DigiCert - одним из крупнейших и надёжнейших корневых центров сертификации, чьи собственные сертификаты встроены в большинство ПО - как MS так и других производителей. Правда сертификат весьма краткосрочный (до 5 мая действителен нынешний).


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 (Гостей: 28)

© 2000-2024 Fox Club 
Яндекс.Метрика