2011-03-30 257 views
1

我使用fsockopen()从另一台服务器上的网页请求的值返回多余的字符。返回的值只是一个单词(例如“法语”)。当我在本地主机(MAMP)上测试时,这个工作正常,向远程服务器发出请求。然而,当我测试服务器到服务器我结束了多余的字符,如:HTTP GET请求()

6%0D%0AFrench%0D%0A0%0D%0A%0D%0A7%0D%0AEnglish%0D%0A0%0D%0A%0D%0A

我如果您使用了显示here的HTTP_REQUEST()函数。我做的唯一的改变是增加超时。我使用称之为:

$thelanguage = http_request('GET', $domain, 80, $path);

我测试过这个,并从多台服务器,并且多余的字符显示出来时,我提出请求本地主机以外的任何地方。

我有点不知所措如何继续。看起来,返回字符串开头的6或7是一个字符数,但我不知道这是从哪里来的。任何帮助将不胜感激。

+0

我知道这是片状,但你会考虑剥离这些无关的数据? – alex 2011-03-30 03:28:03

+0

我会考虑这是最后的手段。由于额外的数据似乎基于返回的单词稍微改变,所以它不完全是防弹的。我也不知道最终会被退回的所有单词,所以我无法测试所有的情况。 – ggutenberg 2011-03-30 03:30:06

回答

1

看来,6或7的返回是一个字符数的字符串的开始,

是啊!你会看到chunked transfer encoding:数据长度,CRLF,数据,然后是两个CRLF对。我相信最后一次CRLF意味着它是最后一块。

您可能想要使用更为成熟,经过充分测试的全功能HTTP请求机制,如通常内置的curl extensionPEAR's HTTP_Request2

+1

+1教我的东西。 – alex 2011-03-30 03:35:58

+0

我想(最初使用cURL完成),但是这个脚本将分发给客户在他们的服务器上运行,这是我无法控制的。我担心cURL或PEAR在某些情况下不会被安装/启用,所以我试图使用最低公分母。 – ggutenberg 2011-03-30 03:42:35

+0

@dosboy,HTTP_Request2是在BSD许可证下发布的,因此您可以简单地将它与您的代码捆绑在一起(以及所需的Net_URL2)。它包括[原始套接字和卷曲的适配器](http://pear.php.net/manual/en/package.http.http-request2.adapters.php),所以它*应该*在任何地方工作得很好。 – Charles 2011-03-30 03:46:08