TIdHTTP->Get() , Сервер игнорирует параметры

У меня есть этот запрос:

https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions[krs_podmioty.nip]=7282827109

В браузере он работает нормально, показывая данные, специфичные для данного nip числа.

Но в Indy я получаю ответ, как если бы часть запроса была опущена:

https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json

Я пробовал это до сих пор:

BurL = "https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions[krs_podmioty.nip]=7282827109";

BurL = TIdURI::URLEncode("https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions[krs_podmioty.nip]=7282827109");

End even raw urlencoded data:

BurL= "https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions%5Bkrs_podmioty.nip%5D=7282827109";

Код:

try {
     Resp = IdHTTPKrs->Get(BurL);
    } catch (EIdHTTPProtocolException& e) {
    ShowMessage(e.Message);
}

Что не так, и как я могу это исправить? Или, может быть, я уже слишком устал и упускаю что-то очевидное?

Я подозреваю, что что-то связано с [] частью запроса, но здесь я просто предполагаю. Подобные запросы без [] работают нормально.

Я использую C++Builder XE6 pro с Indy 10.6.0.512.


person Vancalar    schedule 23.02.2018    source источник
comment
И к вашему сведению, ваша версия Indy устарела. Похоже, это важная информация, после обновления Indy я получаю правильные результаты. Сформулируйте это в ответ, и я приму его   -  person Vancalar    schedule 24.02.2018


Ответы (1)


Ваша версия Indy устарела. Последняя версия на момент написания этой статьи — 10.6.2.5448. Используя последнюю версию, я не могу воспроизвести вашу проблему. Обе кодировки URL возвращают мне одни и те же данные. Как и должно быть, поскольку веб-серверу требуется декодировать закодированные в urlencode символы при обработке запрошенного URL-адреса. conditions%5Bkrs_podmioty.nip%5D=7282827109 и conditions[krs_podmioty.nip]=7282827109 должны обрабатываться сервером одинаково, поскольку они сематически идентичны.

person Remy Lebeau    schedule 24.02.2018