for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Запрос по протоколу HTTPS
lili
Автор

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

Re: Запрос по протоколу HTTPS
of63

Сообщений: 12303
Откуда: Н.Новгород
Дата: 03.04.18 14:21:26ОтветитьЦитировать
Также как и по HTTP-запросу
Первая попавшаяся заготовка для экспериментов вот здесь например: forum.foxclub.ru
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 345
Откуда: Сыктывкар
Дата: 04.04.18 09:46:58ОтветитьЦитировать
Да вроде все так и делаю:
  
    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

Сообщений: 12303
Откуда: Н.Новгород
Дата: 04.04.18 10:38:02ОтветитьЦитировать
Подставьте заведомо рабочий адрес, работает ли в принципе...

Вот так работает
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.

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



Исправлено: of63, 04.04.18 13:09
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
Igor Korolyov

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


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

Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 345
Откуда: Сыктывкар
Дата: 04.04.18 16:00:23ОтветитьЦитировать
Вот так метод 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

Сообщений: 12303
Откуда: Н.Новгород
Дата: 04.04.18 16:40:04ОтветитьЦитировать
Что-то указывать в Send имеет смысл, если передается методом POST (а не GET).
Без конкретики (адрес, спецификация обмена) нельзя что-то сказать, и не видно что за ошибка (программная, или сервер ответил...)
Например, вот так POST успешно уходит в ya.ru, он чем-то отвечает.
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
lili
Автор

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

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



Исправлено: lili, 05.04.18 15:42
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
of63

Сообщений: 12303
Откуда: Н.Новгород
Дата: 05.04.18 14:32:35ОтветитьЦитировать
Сервер нормально отвечает, малозначащей xml-строкой, такой же, как и в браузере... А надо какой?



Исправлено: of63, 05.04.18 15:05
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 32089
Дата: 05.04.18 14:34:10ОтветитьЦитировать
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

Сообщений: 12303
Откуда: Н.Новгород
Дата: 05.04.18 14:44:32ОтветитьЦитировать
> Асинхронный запрос тут не требуется (open("GET",cUrl,.T.)...)
Если сервер вообще не ответит, то .Send() будет ожидать его бесконечно, мтк.
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
Igor Korolyov

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


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




Исправлено: Igor Korolyov, 05.04.18 15:01
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 345
Откуда: Сыктывкар
Дата: 05.04.18 15:41:27ОтветитьЦитировать
Большое спасибо! Теперь действительно работает.
Мне бы еще ссылочку как "научиться их верно кодировать", если вас не затруднит.
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
of63

Сообщений: 12303
Откуда: Н.Новгород
Дата: 05.04.18 16:21:04ОтветитьЦитировать
> ...научиться их верно кодировать...
Звучит, примерно как "верно управлять велосипедом": падаешь влево - крути руль влево, и т.п

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



Исправлено: of63, 05.04.18 16:29
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 345
Откуда: Сыктывкар
Дата: 05.04.18 16:36:24ОтветитьЦитировать
Всем спасибо! Разобралась.
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
lili
Автор

Сообщений: 345
Откуда: Сыктывкар
Дата: 27.04.18 11:25:44ОтветитьЦитировать
В продолжение темы.
На некоторых машинах при выполнении запроса выходит сообщение о невозможности проверить отзыв сертификата (см. вложение), жмем "Да" и работаем. Но хотелось бы от этого избавиться. Вопрос в том, как это сделать и почему не на всех машинах в сети выходит такое сообщение. Скажу сразу, что в сертификатах я не сильна, поэтому прошу объяснить подробнее.
Ratings: 0 negative/0 positive


Вложения:
[сертификат.jpg (22.7KB)]  

Re: Запрос по протоколу HTTPS
Crispy

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

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


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

Re: Запрос по протоколу HTTPS
of63

Сообщений: 12303
Откуда: Н.Новгород
Дата: 27.04.18 13:31:41ОтветитьЦитировать
В IE галочка есть в настройках: www.makak.ru
Ratings: 0 negative/0 positive

Re: Запрос по протоколу HTTPS
Igor Korolyov

Сообщений: 32089
Дата: 27.04.18 18:27:07ОтветитьЦитировать
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: 64 Божья_коровка Alsim Simple777  and Guests: 61


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