powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
18 сообщений из 18, страница 1 из 1
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080044
SilverShield
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!
Коллеги, прошу совета. Есть легаси-проект на 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
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080059
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverShield
Может есть варианты лучше?
Анализировать сниффером, что отправляется из D7 и XE3 и убирать отличия
...
Рейтинг: 0 / 0
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080087
SilverShield
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, сверил в wireshark, различие между пакетами в 15 байт. сам запрос одинаковый, но начало пакета до GET различается. В XE 3 на 15 байт длиннее. Это сам indy разных версий по разному срабатывает. Но не представляю как для D7 сделать также...
...
Рейтинг: 0 / 0
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080093
SilverShield
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вернее наоборот, у D7 на 15 байт больше пакет - 785.
У ХЕ3 - 770 байт
...
Рейтинг: 0 / 0
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080113
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverShield,

Вы не длину сравнивайте, а содержимое
...
Рейтинг: 0 / 0
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080136
SilverShield
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_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
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080145
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverShield
начало пакета
У вас что https протокол? Тогда вам нужен сниффер, который будет расшифровывать пакеты
...
Рейтинг: 0 / 0
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080161
SilverShield
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том то и дело, что протокол 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
Получить XML в ответ на get запрос от веб-сервера с авторизацией на Delphi 7
    #40080164
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverShieldВ том то и дело, что протокол http...

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

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

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

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

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

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

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

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


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