Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7 / 18 сообщений из 18, страница 1 из 1
25.06.2021, 10:23
    #40080044
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Доброго дня!
Коллеги, прошу совета. Есть легаси-проект на Delphi 7.
В нем происходило обращение к веб-сервису и получение от него XML.
В качестве реализации была выбрана компонента NativeXML и в ней код был простой:
NativeXML.LoadFromURL(request);

Все было хорошо, пока у веб-сервиса не появилась авторизация. Для NativeXML не нашел как ее добавить.
Если делать через idHTTP (добавив у него задание логина и пароля), то при выполнении idHTTP.Get(request) для некоторых запросов получаю ошибку HTTP/1.1 400 Bad request

При этом сами запросы правильные, NativeXML по ним получал данные без ошибок. Преобразование TIdURI.URLEncode к запросу применялось, спец символы тоже заменялись.
Если такое же обращение выполнить в приложении с idHTTP, но собранном в Delphi XE3, то успешно выполняется.

Есть предположение, что что-то не так с indy в 7-ой Дельфи. Но переставлять indy нежелательно, боюсь совсем старый проект поломать.

Сейчас из идей:
- вместо idHTTP использовать winsock и в нем GET выполнить, но пока не нашел примера как авторизацию в нем выполнить.
- собрать на XE3 библиотеку DLL и ее вызывать для выполнения запроса и получения XML

Может есть варианты лучше?
...
Рейтинг: 0 / 0
25.06.2021, 10:57
    #40080059
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShield
Может есть варианты лучше?
Анализировать сниффером, что отправляется из D7 и XE3 и убирать отличия
...
Рейтинг: 0 / 0
25.06.2021, 12:00
    #40080087
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
_Vasilisk_, сверил в wireshark, различие между пакетами в 15 байт. сам запрос одинаковый, но начало пакета до GET различается. В XE 3 на 15 байт длиннее. Это сам indy разных версий по разному срабатывает. Но не представляю как для D7 сделать также...
...
Рейтинг: 0 / 0
25.06.2021, 12:14
    #40080093
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
вернее наоборот, у D7 на 15 байт больше пакет - 785.
У ХЕ3 - 770 байт
...
Рейтинг: 0 / 0
25.06.2021, 13:00
    #40080113
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShield,

Вы не длину сравнивайте, а содержимое
...
Рейтинг: 0 / 0
25.06.2021, 14:35
    #40080136
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
_Vasilisk_, начало пакета для D7:
0000 00 15 5d 05 64 00 1c 6f 65 48 3a 67 08 00 45 00
0010 03 03 50 6c 40 00 80 06 1c 03 c0 a8 05 02 c0 a8
0020 05 33 f0 7b 23 17 b7 f9 d4 8a 2b 83 3c 67 50 18
0030 01 00 1a 42 00 00

Это в текстовом виде: ]doeH:gEôVs@À¨À¨3ð~#¹¹ÈźaíP¿

Для ХЕ3:
0000 00 15 5d 05 64 00 1c 6f 65 48 3a 67 08 00 45 00
0010 02 f4 56 73 40 00 80 06 16 0b c0 a8 05 02 c0 a8
0020 05 33 f0 7e 23 17 b9 b9 c8 c5 81 ba 61 ed 50 18
0030 01 00 91 bf 00 00

Это в текстовом виде: ]doeH:gEPl@À¨À¨3ð{#·ùÔ+<gPB
Дальше одинаково (GET и сам запрос).

Но я абсолютно не представляю, что с этим дальше делать... В исходниках индевского сокета различие смотреть, как они Get обрабатывают?
...
Рейтинг: 0 / 0
25.06.2021, 15:09
    #40080145
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShield
начало пакета
У вас что https протокол? Тогда вам нужен сниффер, который будет расшифровывать пакеты
...
Рейтинг: 0 / 0
25.06.2021, 16:28
    #40080161
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
В том то и дело, что протокол http... и дальше сам пакет читаемый.

]doeH:gEPl@À¨À¨3ð{#·ùÔ+<gPBGET /serv/yadr/select?q=(+(id_keyn%3A%5B*+TO+*%5D+AND+((keys%3A1)+OR+(caption%3A1)))+)&rows=50&debugQuery=true&hl.simple.pre=%3Cem%3E&hl.highlightMultiTerm=false&indent=true&hl.simple.post=%3C%2Fem%3E&start=0&hl.fl=*&hl=true&hl.requireFieldMatch=false&wt=xml&hl.usePhraseHighlighter=true HTTP/1.1
Connection: keep-alive
Content-Type: text/html
Host: 192.168.1.21:8593
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3
Authorization: Basic hFnRlmwqpenaY0KKa1VHallaNmm5
...
Рейтинг: 0 / 0
25.06.2021, 16:32
    #40080164
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShieldВ том то и дело, что протокол http...

Нет, это явно не HTTP. В HTTP запрос начинается прямо с первого байта потока, а у тебя там
какой-то мусор. Что и приводит к ошибке "Bad request". Отладчик в руки и разбирайся откуда
это лезет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.06.2021, 16:42
    #40080168
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Если это запрос - то перед HTTP/1.1 должно быть названия метода и URI, а не этот бутор.
Если это ответ сервера - то после HTTP/1.1 должен быть код результата, а его не видно (начального бутора тоже быть не должно, понятно).
...
Рейтинг: 0 / 0
25.06.2021, 17:00
    #40080176
SilverShield
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Согласен, однако в XE3 начинается также с мусора перед запросом:

]doeH:gEôVs@À¨À¨3ð~#¹¹ÈźaíP¿GET /serv/yadr/select?q=...(дальше текст аналогичен)

но при этом сервер на него не ругается, а выдает результаты.
Может это Wireshark лишнее добавил...

Видимо надо под отладчиком в код indy лезть...
...
Рейтинг: 0 / 0
25.06.2021, 19:25
    #40080211
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShield
Может это Wireshark лишнее добавил...
А покажите скриншот всего окна Wireshark. И верхней панели с пакетами и нижней с данными
...
Рейтинг: 0 / 0
28.06.2021, 10:30
    #40080419
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Может, это заголовки TCP/IP?
...
Рейтинг: 0 / 0
29.06.2021, 03:15
    #40080636
Vizit0r
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
зачем пользоваться WireShark, если ты не понимаешь, что в нем показывается?

Поставь себе http(s) прокси, типа Fiddler4 и им подобным и смотри http-пакеты, без низкого уровня.
...
Рейтинг: 0 / 0
29.06.2021, 08:46
    #40080648
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
SilverShield,

этот "мусор" - данные аутентификации.
Возможно, инди от Д7 не поддерживают (или реплизуют с ошибкой) уровень аутентификации, которую запросил сервер. Посмотри в отладчике, что хочет сервер и что выдает твой клиент на Д7 и на новых дельфях.
...
Рейтинг: 0 / 0
29.06.2021, 10:10
    #40080657
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Delphi7 прекрасно работают с Indy10 - попробуйте через них скачать файл.
...
Рейтинг: 0 / 0
29.06.2021, 12:19
    #40080680
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
ъъъъъэтот "мусор" - данные аутентификации.

Какого протокола?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.06.2021, 13:30
    #40080698
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
Dimitry Sibiryakov
ъъъъъэтот "мусор" - данные аутентификации.

Какого протокола?Возможно, самописного.
Но маловероятно - там похоже на куски кода из буффера обмена.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7 / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]