|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Приветствую, коллеги. Подскажите пожалуйста, как подружить THTTPClient с базовой авторизацией. Делал с инди - всё работает отлично, HTTPClient - либо ругается при попытке добавить авторизацию в виде хедера, либо возвращает 401 если делаю через ивент: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 19:27 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, Так указывай корректный параметр, всего-то делов... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 22:04 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Можно конкретнее, будьте так любезны :) Я не могу найти, в каком месте ошибаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 02:00 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Код: pascal 1. 2. 3.
вроде должно этого хватать. Но я не проверял, не на чем ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 10:19 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal, оно компилится, но не работает. Та же ошибка 401. Самое главное, что код выполняется. И даже когда я ивент хендлер навешиваю - в этом хендлере код исполняется, я специально брейкпоинт ставил. Оно вроде как должно работать. Но не работает. То есть абсолютно то же самое делает, как будто кода с авторизацией нет. У меня 2 запроса последовательно выполняется: первый не требует авторизацию, второй - требует. Если к первому добавить авторизацию, он будет выполняться как и раньше, если ко второму не добавить - будет то же, как и в примерах выше: ошибка 401. При абсолютно те же вызовы, но через Indy, работают без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:18 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Тогда бери сниффер и смотри, чего по факту отправляется. Можно даже свой сервер запустить, чтобы не связываться с перехватом https. Или example.com, он отвечает по http. Заодно и сравни с тем, что пишет инди. Может, там дайджест авторизация, например ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:34 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Я шлю через postman, для проверки правильности работы сервера, а что бы посмотреть что шлю - пишу php скрипт, тк нормальный сниффер найти не удалось. Где бы просто указать имя процесса и посмотреть реальный трафик. Обычно достаточно postmanи становится понятно, что надо сдать, что бы результат был нужным. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 03:32 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
antox Я шлю через postman, для проверки правильности работы сервера, а что бы посмотреть что шлю - пишу php скрипт, тк нормальный сниффер найти не удалось. Где бы просто указать имя процесса и посмотреть реальный трафик. Обычно достаточно postmanи становится понятно, что надо сдать, что бы результат был нужным. хз как ты искал, их штук несколько рабочих сходу гуглится. начни с Fiddler4. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 09:55 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Я попробовал установить у себя Fiddler Classic. Он запускается, но в логе только 1 строчка. Прокси прописан на лупбек фиддлена, пробовал мониторить браузеры - даже их не ловит. Ни HTTP, ни HTTPS (сертификат ставил). Установил Wireshark - этот ловит всё, но отфильтровать и понять, что же там отсылается мне не удалось, все пакеты зашифрованы. Коллега потестил у себя через фиддлер (у него работает) - там видно, что удалённому серверу просто не отправляются логин и пароль в заголовке (т.е. в заголовке отсутствует Authorization). Кстати, если посоветуете какой-то HTTPS сниффер/дебаггер или расскажете, как заставить работать фиддлер - буду весьма благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 22:21 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, Так пройдись отладкой по коду, он же есть в исходниках, ну ты чё? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 22:32 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, попробуй заголовок передать в следующем виде: Код: pascal 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 05:38 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix Я попробовал установить у себя Fiddler Classic. Он запускается, но в логе только 1 строчка. Прокси прописан на лупбек фиддлена, пробовал мониторить браузеры - даже их не ловит. Ни HTTP, ни HTTPS (сертификат ставил). Установил Wireshark - этот ловит всё, но отфильтровать и понять, что же там отсылается мне не удалось, все пакеты зашифрованы. Коллега потестил у себя через фиддлер (у него работает) - там видно, что удалённому серверу просто не отправляются логин и пароль в заголовке (т.е. в заголовке отсутствует Authorization). Кстати, если посоветуете какой-то HTTPS сниффер/дебаггер или расскажете, как заставить работать фиддлер - буду весьма благодарен. Я ставил Wireshark portable, по мануалам прописал его серт, и все работает. А что тебе мешает обратиться к серверу по HTTP и применить простейший SmSniff? Чтобы посмотреть запрос, совсем не обязательно, чтобы сервер слушал открытый протокол ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 10:21 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Cobalt747, по коду прошёлся. Если в хэдер попытаться добавить авторизацию, то вызовется raise ENetHTTPRequestException, если не добавить, то не смотря на нормально отрабатывающий HTTPClient.CredentialsStorage.AddCredential() или вызывающийся NetHTTPClientAuthEvent - сам THTTPClient добавляет только передаваемые в него хэдеры, а в них авторизации нет. В результате отправляет запрос без авторизации в хэдере, вот сервак его и посылает. asutp2, в классе таких свойств нет. Пробовал через Request.AddHeader() и свойство Request.HeaderValue[] - в результате ошибка 87. Пробовал в HTTPClient.Execute() передавать заголовок с авторизацией - та же ошибка 87. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:27 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, действительно, в моем примере вместо Request .CustomHeaders['Authorization'] нужно указать HTTPClient .CustomHeaders['Authorization'] ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:36 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
asutp2, из HTTPClient.CustomHeaders хэдеры не передаются в HTTPClient.Execute(). При том не только Authorization, но и вообще любые, только что проверил. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 12:16 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, а у тебя какая версия делфи? и почему кстати используешь именно Execute? Например при работе с Post, Get заголовки передаются без проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 12:41 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
У нас используется Delphi 10.2 upd.2. Ну да, не самый свежак, но и не дремучий лес. Постоянно обновляться и переустанавливать все компоненты - и недёшево, и довольно трудоёмко. Execute() использую чтобы можно было передавать любой метод и не делать case IndexStr(). Только что попробовал использовать конкретно метод HTTPClient.Post() - результат тот же самый: либо нет заголовка, либо ошибка 87 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 13:17 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, насчет 10.2 не скажу, а вот в 10.3.3 и 10.4.2 TNetHTTPClient с заголовками работает нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 13:37 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
vdix, ради интереса попробовал, сделал на локальном Apache папку с basic authentication, код, как у вас в обработчике события OnAuthEvent, всё нормально сработало. И по http, и по https, правда с тестовым сертификатом, так что в OnValidateServerCertificate просто написал Accepted := True; , а то компонент не принимает сертификат. Использовал метод Get. Код: pascal 1. 2. 3. 4.
Delphi 10.4 CE. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 13:54 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Видимо действительно что-то с компонентом. Synapse и Indy авторизуются, но оба используют OpenSSL. HTTPClient и NetHTTPClient (фактически обёртка над первым) - не хотят работать с авторизацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2021, 11:08 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Траффик поснифал или так и будешь методом тыка вслепую выснять? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2021, 17:56 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Со сниффером не срослось, написал свой сервер и вывел в лог запрос, все заголовки и пэйлоад. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2021, 13:38 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Ну тоже вариант. И как? Есть разница в запросах? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2021, 11:40 |
|
THTTPClient и базовая авторизация
|
|||
---|---|---|---|
#18+
Конечно есть. Indy и Synapse дают в заголовке нормальную строку базовой авторизации, а оба HTTPClient-а - нет, какие бы ухищрения я не использовал: и через ивент, и устанавливая заголовки как клиенту, так и запросу, и используя AddCredential - либо это не делает ничего, либо в рантайме выдаёт ошибку 87. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 14:05 |
|
|
start [/forum/topic.php?fid=58&msg=40093089&tid=2037075]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 420ms |
0 / 0 |