繁体   English   中英

HTTP请求获得部分响应

[英]HTTP request getting partial response

我试图将这个CrunchBase API页面作为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

UPDATE

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

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

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

虽然看起来要剥离的字节数取决于原始编码器。 另一个评论有一个更彻底的解决方案,并参考RFC1952进一步阅读。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM