|
ibec_http
|
|||
---|---|---|---|
#18+
Добрый день. Нигде не могу найти, как правильно устанавливать http-заголовки, при вызове функции ibec_http_Post(), например? Функции типа ibec_http_SetHeader() или чего-то похожего не нашел, пробовал разные вариации установки заголовков в ibec_http_OpenSession(), но не снискал счастья. Нашел на форуме один пример по передаче xml методом ibec_http_Post(), но там заголовки не устанавливаются при вызове. Помогите, будьте так добры, кто пользовался этими замечательными функциями, как правильно построить запрос с нужными http-заголовками? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2019, 11:42 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Что за заголовки? Поясни на простом примере. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 12:03 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Добрый день. Шаблон POST-запроса для передачи JSON на регистратор выбытия системы маркировки лекарственный препаратов. POST /v1/requests HTTP/1.1 Authorization: Basic {Base64Str} Content-Type: application/json; charset=UTF-8 Accept: application/json Content-Length: BodyLen {JSON Body} То бишь мне надо HTTP-серверу рассказать в хидере, чего именно я ему буду передавать, ну и авторизоваться тоже надо. Вот эти самые хидеры как ставить? P.S. Например если я через WinHTTPRequest делаю запрос на HTTP-сервер. Я значала делаю Open() затем setRequestHeader() <- тут как раз прописываю заголовок затем Send(POSTBody) <- отправка запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 09:03 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 То бишь мне надо HTTP-серверу рассказать в хидере, чего именно я ему буду передавать, ну и авторизоваться тоже надо. Вот эти самые хидеры как ставить? Часть автоматом генерируется. User/Pass для Authorization берется из URL. Content-Length тоже автоматом выставляется по размеру данных в ibec_http_post. В общем, как я понял, нужна возможность задать произвольный заголовок перед POST. В принципе, это не сложно, вроде бы. Завтра попробую. ЗЫ. Я правильно понимаю, что в работу идет последний заголовок с одним и тем же именем? Т.е., если в заголовках прописано Content-Length: 123 Content-Length: 321 то сервер будет смотреть на последний?? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 18:17 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Доброе утро. IBExpert ...В общем, как я понял, нужна возможность задать произвольный заголовок перед POST... Ну не только перед POST, перед GET тоже. IBExpert ...то сервер будет смотреть на последний? Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, но только если значение есть список, разделенный запятыми. Во всех остальных случаях значения более дальних заголовков перекрывают предыдущие. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 05:22 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Можешь попробовать в свежей версии ibec_http_SetHeader. После ее вызова в заголовках будет только то, что ты в нее передал. А перед POST/GET там еще автогенерация заголовков есть, она вставит свое ПЕРЕД твоими. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 10:36 |
|
ibec_http
|
|||
---|---|---|---|
#18+
IBExpert Можешь попробовать в свежей версии ibec_http_SetHeader. После ее вызова в заголовках будет только то, что ты в нее передал. А перед POST/GET там еще автогенерация заголовков есть, она вставит свое ПЕРЕД твоими. Чутка бы подробностей по использованию, как правильно то передавать туда параметры и значения? Вызывать функцию последовательно, или всё в одной строке? Я попробовал так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Мне возвращается 500 от сервера, т.е. он не может переварить данный запрос. Ровно такой же в точности запрос через WinHTTPRequest возвращает мне корректный JSON с описанием препарата. Что делаю не так? P.S. К сожалению токен, указанный в авторизации моего запроса, живет только 30 минут ибо таковы настройки http-сервера ИС МДЛП, он на данный момент действующий, но... P.P.S Кстати, а что происходит при вызове ibec_http_OpenSession()? Чудится мне (глядя на пример с проверкой последней версии IBExpert через ibec_http_xxx), там сразу же идет GET к серверу? Или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 11:48 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 Чутка бы подробностей по использованию, как правильно то передавать туда параметры и значения? Вызывать функцию последовательно, или всё в одной строке? Я попробовал так: Все в одной строке, правильно сформатированное. Т.е., после каждого заголовка должен быть перевод строки или что там должно быть. А как ты пробовал, так в заголовках останется только то, что в последнем вызове было. Думал, это очевидно, ведь ibec_http_GetHeader возвращает тебе заголовки именно одной строкой. Вот так же их и нужно скармливать ibec_http_SetHeader. OrsoF1 P.P.S Кстати, а что происходит при вызове ibec_http_OpenSession()? Чудится мне (глядя на пример с проверкой последней версии IBExpert через ibec_http_xxx), там сразу же идет GET к серверу? Или я ошибаюсь? Ничего там еще не происходит, кроме разбора переданных опций. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 12:13 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1, ну ты на стороне сервера заголовки логируй. Увидишь что не так ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 12:15 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Симонов Денис OrsoF1, ну ты на стороне сервера заголовки логируй. Увидишь что не так Ну на серверах ИС МДЛП федерального проекта маркировки лекарственных препаратов, мне хрен кто даст чего логировать )) Потестирую завтра на своем web-сервере, отпишусь, что будет получаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:06 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1, ах эти... маркировшики сочувствую. Тоже боремся ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:22 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Ну и? Результаты-то какие?? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 17:06 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Добрый день. Добрался наконец до протестировать на своем web-сервере, есть у меня небольшой сервис с моим api для обмена данными с мед. организациями, так вот передаю на него xml-пакет авторизации вот так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
На сервере ловлю заголовки, и смотрю ответ сервера: *********************************************************** REQUEST_URI:/testapi/v1/test_auth CONTENT_TYPE:Application/octet-stream, text/xml CONTENT_LENGTH:394 REQUEST_METHOD:POST API_METHOD:test_auth Auth OK *********************************************************** Что вижу, запрос отработал, аутентификация прошла и сервер вернул на клиента токен в ответном xml, тут всё ок. По заголовкам: при попытке самостоятельно установить content-length на сервер прилетает конструкция вида: content-length: 394, 394 и т.к. данный параметр не может иметь ряд значений, сервер ругается. Т.е. видимо, при вызове ibec_http_Post(), устанавливаются автоматические заголовки, при этом не проверяется, можно ли для данного заголовка передавать ряд значений через запятую, или нет. Далее, как видно в content-type к тому заголовку, что я передаю явно 'text/xml', добавился так же 'Application/octet-stream'. В принципе это не критично, если сервер, который будет обрабатывать заголовки, не делает строгих проверок на конкретно заданный content-type. Например мой сервер как раз таки эту проверку делал и не пропускал запрос, пока я не переделал проверку на вхождение нужного мне типа контента в заголовок content-type, а не на полное соответствие заголовка нужному типу. Насколько я понимаю ряд заголовков устанавливается автоматически при вызове ibec_http_Post(). Например, тот же content-length явно раньше установить негде ибо тело запроса только тут появляется. Предложение: если какой-либо заголовок был установлен функцией ibec_http_SetHeader(), то нигде дальше данный заголовок не нужно дополнять/изменять/удалять, корректность данного заголовка должна оставаться на совести кодера, который его поставил. Таким образом избегаем неоднозначности при прописывании заголовков, кодер будет уверен, что в заголовке именно то, что он прописал, и это не изменится, а если какой-то необходимый заголовок вручную установлен не был, опять же content-length, то прописывать его автоматически как сейчас и происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 05:01 |
|
ibec_http
|
|||
---|---|---|---|
#18+
В дополнение к предыдущему сообщению: запрос на сервер ИС МДЛП отправить так и не удалось. При установке всех заголовков ровно так же, как делаю при обращении через WinHTTPRequest, сервер возвращает 500, видимо какой-то заголовок таки он не может правильно переварить, но где и почему точно сказать не могу т.к., понятно, что на их серверах заголовки не залогировать. В связи с этим, думаю, что предложенное в предыдущем сообщении поведение при работе с заголовками, будет верным. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 05:48 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 По заголовкам: при попытке самостоятельно установить content-length на сервер прилетает конструкция вида: content-length: 394, 394 А зачем ты его самостоятельно устанавливаешь? OrsoF1 Предложение: если какой-либо заголовок был установлен функцией ibec_http_SetHeader(), то нигде дальше данный заголовок не нужно дополнять/изменять/удалять Это уже совсем не на пять минут работа, нужно лезть в потроха компонентов и ковырять их. Но для начала хотелось бы понять, зачем тот же content-length нужно извне задавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 06:31 |
|
ibec_http
|
|||
---|---|---|---|
#18+
В свежей версии после post вызови ibec_http_GetProperty: sHdr = ibec_http_GetProperty(sess, 'LastSentHeaders'); Она вернет тебе текст заголовков, отправленных на сервер. У себя я, кстати, не вижу никаких "content-length: 394, 394". Если я устанавливаю свой content-length, то он идет в списке заголовков отдельной строкой и после такого же автозаголовка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 07:06 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Выполняю такой скрипт Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
в ibec_ShowMessage(:lHeaders); получаю пустое сообщение. IBExpert В свежей версии после post вызови ibec_http_GetProperty: sHdr = ibec_http_GetProperty(sess, 'LastSentHeaders'); Она вернет тебе текст заголовков, отправленных на сервер. У себя я, кстати, не вижу никаких "content-length: 394, 394". Если я устанавливаю свой content-length, то он идет в списке заголовков отдельной строкой и после такого же автозаголовка. А как сервер будет интерпретировать два одинаковых заголовка с разными значениями? Вот и я думаю, что он преобразует это в один заголовок со списком значений через запятую... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 07:51 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 в ibec_ShowMessage(:lHeaders); получаю пустое сообщение. Ты точно обновил свой эксперт? У меня все работает, я проверял. OrsoF1 А как сервер будет интерпретировать два одинаковых заголовка с разными значениями? Я не знаю, поэтому и спрашивал тебя об этом в начале темы. Сейчас надо понять, в чем именно проблема, а потом уже думать, как ее решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 08:19 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Обновил. Сейчас версия 2019.12.10.1, я так понимаю это сегодняшняя? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 08:23 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 Обновил. Сейчас версия 2019.12.10.1, я так понимаю это сегодняшняя? Ну да, все верно. Тогда странно... A, вот на твоем примере у меня тоже пусто выдает. Сейчас посмотрю, в чем там дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 08:27 |
|
ibec_http
|
|||
---|---|---|---|
#18+
В общем, там до post дело и не доходит, на коннекте к серверу все заканчивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 08:29 |
|
ibec_http
|
|||
---|---|---|---|
#18+
Короче, я не знаю, почему он обламывается на коннекте, и сервер выдает 500. Думал, может поддержка HTTPS отвалилась, так нет, на другом скрипте все работает. Да и на твоем веб-сервере вроде ОК все? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 09:04 |
|
ibec_http
|
|||
---|---|---|---|
#18+
IBExpert, да, на моем всё хорошо через https. А у тебя ibec_http_xxx() функции это обертка для чего-то виндозного, или ты там полностью сам протокол реализуешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 09:27 |
|
ibec_http
|
|||
---|---|---|---|
#18+
OrsoF1 А у тебя ibec_http_xxx() функции это обертка для чего-то виндозного, или ты там полностью сам протокол реализуешь? Это обертка над Synapse http://www.ararat.cz/synapse/ Обламывается оно с установкой ssl-соединения с сервером, возвращает ошибку 10091. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 09:41 |
|
ibec_http
|
|||
---|---|---|---|
#18+
IBExpert, ну тут, вполне вероятно, особенности работы сервера ИС МДЛП. Дело в том, что для доступа к нему должен использоваться TLS1.2 если для Synapse не включена поддержка, то будет ошибка. Тут наткнулся на форум, может поможет? http://www.cyberforum.ru/delphi-networks/thread2114727.html ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 10:02 |
|
|
start [/forum/topic.php?fid=42&msg=39900546&tid=1598691]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 376ms |
0 / 0 |