HTTP请求获得部分响应

时间:2012-06-12 22:54:13

标签: php http request

我正在尝试将this CrunchBase API page作为PHP中的字符串。当我在浏览器中访问该页面时,我得到完整的响应(大约230K字符);但是,当我尝试在脚本中获取页面时,响应要短得多(服务器上有24341个字符,本地有36629个字符,其他长CrunchBase页面的字符数完全相同)。为了获取页面,我使用的函数几乎与drupal_http_request()相同,尽管我没有使用Drupal。 (我也尝试过使用cURL和file_get_contents()并得到了相同的结果。现在我正在思考它,过去我在Python中的CrunchBase也经历了相同的事情。)

可能导致此问题的原因以及如何解决? PHP 5.3.2,Apache 2.2.14,Ubuntu 10.04。以下是有关回复的其他详细信息:

[protocol] => HTTP/1.1
[headers] => Array
    (
        [content-type] => text/javascript; charset=utf-8
        [connection] => close
        [status] => 200 OK
        [x-powered-by] =>
        [etag] => "d809fc56a529054e613cd13e48d75931"
        [x-runtime] => 0.00453
        [content-length] => 230310
        [cache-control] => private, max-age=0, must-revalidate
        [server] => nginx/1.0.10 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
    )

我认为这不是用户代理问题,因为我在请求中使用了User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6

更新

根据this thread,我需要在请求中添加Accept-Encoding: gzip, deflate标头。这确实会导致更长的请求结果,但现在我必须弄清楚如何给它充气。 gzinflate()函数失败并显示Warning: Data error。关于如何夸大回应的任何想法?

1 个答案:

答案 0 :(得分:2)

请参阅PHP文档中有关gzinflate()的注释,特别是有关剥离初始字节的注释。 last comment为我做了诀窍:

<?php $dec = gzinflate(substr($enc,10)); ?>

虽然看起来要剥离的字节数取决于原始编码器。 Another comment有更全面的解决方案,并提及RFC1952以供进一步阅读。

显然gzdecode()旨在解决此问题,但尚未发布。

ps - 我删除了关于返回数据为纯文本的评论。我错了。