我想使用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(/),因此我的二进制数据已损坏。我做错了什么?
答案 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版修订版。