c++builderindyindy10c++builder-xe6

TIdHTTP->Get() , Server ignores parameters


I've got this query:

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

In a browser, it works OK, showing data specific for the given nip number.

But in Indy, I get a response as if the query part was omitted:

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

I've tried this so far:

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";

Code:

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

What's wrong, and how can I fix this? Or, maybe I am too tired already and am missing something obvious?

I suspect there is something with the [] part of the query, but I am just guessing here. Similar queries without the [] work OK.

I am using C++Builder XE6 pro, with Indy 10.6.0.512


Solution

  • Your Indy version is out of date. The latest version, at the time of this writing, is 10.6.2.5448. Using the latest version, I can't reproduce your issue. Both URL encodings return the same data for me. As they should be, since a web server is required to decode urlencoded characters when processing the requested URL. conditions%5Bkrs_podmioty.nip%5D=7282827109 and conditions[krs_podmioty.nip]=7282827109 should be getting processed the exact same way by the server, as they are sematically identical data.