Delphi Indy正在修改我URL中的二进制数据

Delphi Indy正在修改我URL中的二进制数据,delphi,delphi-7,Delphi,Delphi 7,我想使用Indy组件通过GET发送一些二进制数据。 因此,我有一个类似www.awebsite.com/index.php?data=xxx的URL,其中xxx是使用ParamsEncode函数编码的二进制数据。编码后,二进制数据被转换为类似于bB7%18%11z\的内容,因此我的URL类似于: www.awebsite.com/bB7%18%11z\ 我已经看到,如果我的URL包含反哈希字符(请参阅URL中的最后一个字符),那么在TIdURI.NormalizePath中,它将被斜杠字符(/)

我想使用Indy组件通过
GET
发送一些二进制数据。 因此,我有一个类似www.awebsite.com/index.php?data=xxx的URL,其中xxx是使用
ParamsEncode
函数编码的二进制数据。编码后,二进制数据被转换为类似于
bB7%18%11z\
的内容,因此我的URL类似于:
www.awebsite.com/bB7%18%11z\


我已经看到,如果我的URL包含反哈希字符(请参阅URL中的最后一个字符),那么在
TIdURI.NormalizePath
中,它将被斜杠字符(/)替换,因此我的二进制数据已损坏。我做错了什么?

URL中不允许使用反斜杠,为了避免Windows和*nix系统之间的混淆,所有反斜杠都被斜杠替换,以保持正常工作。请参阅第5节,HTTP,httpurl

您可以自己尝试用
%5C
替换反斜杠


这就是说,您应该尝试使用MIME编码,或者尝试获得POST请求的窍门

您使用的是旧版本的Indy。反斜杠包含在Indy现在使用的
不完美
列表中。Remy于2010年7月在Tiburon分行对其进行了修订,修订版为4272:

r4272 | Indy RemyLebeau | 2010-07-07 03:12:23-0500(2010年7月7日星期三)|一行

更改了TIdURI的内部逻辑,并将一些可共享逻辑移到IdGlobalProtocols.pas中,以供以后在TIDWTTP中使用


2010年9月,它与Indy 10.5.7的其余部分合并,修订版为4394。

谢谢Stijn。如果不允许\,那么为什么不在ParamsEncode函数中替换?它的名字有误导性。还有其他像\这样的字符会产生问题吗?我将实现一个名为ParamsEncodeAlsoBackSlash:)的函数,谢谢Rob。丹尼斯·帕斯莫尔说,我使用的是与D7一起工作的最新版本(10.203或10.2.3)。否则,只需应用4272.PS中的更改:我想您的意思是v4611:“只是对该线程的后续操作,因为我有一段时间没有检查它,但我只是下载、构建并安装了Indy10_4611.zip,使用Delphi 7没有更多问题”:)太好了。非常感谢你的链接。我现在只需要找到那个包裹:)不需要找到包裹;直接从SVN获取它:
SVN co-r 4611https://svn.atozed.com:444/svn/Indy10