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

时间:2011-04-18 21:03:05

标签: 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包含backshash char(请参阅URL中的最后一个char),它将替换为TIdURI.NormalizePath中的斜杠char(/),因此我的二进制数据已损坏。我做错了什么?

2 个答案:

答案 0 :(得分:4)

URL中不允许使用反斜杠,为避免Windows和* nix系统之间出现混淆,所有反斜杠都会被斜杠替换,以尝试保持工作正常。请参阅http://www.faqs.org/rfcs/rfc1738.html第5节,HTTP,httpurl

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

也就是说,您应该尝试使用MIME编码,或尝试获取POST请求。

答案 1 :(得分:2)

你正在使用旧版本的Indy。反斜杠包含在Indy现在使用的UnsafeChars列表中。雷米于2010年7月在Tiburon分公司修改了4272,改变了它:

  

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

     

TIdURI的内部逻辑更改,并将一些可共享逻辑移至IdGlobalProtocols.pas中,以便以后在TIdHTTP中使用。

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