http_post_data在响应中添加额外的字符

时间:2010-03-23 17:28:04

标签: php http post

Hey Guys使用http_post_data时,我会收到一些额外的字符,如'5ae'和'45c'以及有效数据。我发送的数据是XML,响应也是如此。响应包含使XML无效的这些奇怪的字符。如果我使用fsockopen我没有这个问题。真的想要一些意见。

2 个答案:

答案 0 :(得分:1)

你的问题并没有提供太多细节,但(非常猜测,但这让我想起了这个)这可能与 Chunked transfer encoding (引用):

  

如果Transfer-Encoding标头带有   chunked的值在一个中指定   HTTP消息,消息的正文   是由一个未指定数量的   以最后的零大小结尾的块   块。

     

每个非空的块都以   它嵌入的数据的八位字节数   (以十六进制编写的大小)后跟一个CRLF (回车   和换行),以及数据本身。


您在数据中获得的5ae45c可能与每个数据块的大小相对应。

如果您尝试手动发送HTTP请求,那可能不是一个好主意:HTTP不是一个如此简单的协议,您应该使用已经存在的库来处理那种烦恼。

例如,您可以查看curl - 请参阅curl_setopt以获取令人印象深刻的可能选项列表。


编辑:我意识到http_post_data是由PECL http extension提供的功能。

在该库中,您可能感兴趣的功能是解码分块数据:http_chunked_decode

答案 1 :(得分:1)

是的,这是Chucked Transfer Encoding的结果。 我们可以通过取消选中响应窗格的Transformer选项卡中的'Chunked Transfer-Encoding'来在fiddler中观察到这种行为。