【问题标题】:TIdHTTP->Get() , Server ignores parametersTIdHTTP->Get() ,服务器忽略参数
【发布时间】:2023-03-22 22:32:01
【问题描述】:

我有这个查询:

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

即使是原始 urlencoded 数据也结束:

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

【问题讨论】:

  • “仅供参考,您的 Indy 版本已过时”看来这是至关重要的信息,升级 indy 后我得到了正确的结果。把它变成一个答案,我会接受它

标签: c++builder indy indy10 c++builder-xe6


【解决方案1】:

您的 Indy 版本已过期。在撰写本文时,最新版本是 10.6.2.5448。使用最新版本,我无法重现您的问题。两种 URL 编码都为我返回相同的数据。应该如此,因为在处理请求的 URL 时,需要 Web 服务器来解码 urlencoded 字符。 conditions%5Bkrs_podmioty.nip%5D=7282827109conditions[krs_podmioty.nip]=7282827109 应该由服务器以完全相同的方式处理,因为它们是语义相同的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2011-07-09
    • 2019-11-30
    • 2011-05-09
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多