0

我正在尝试将此 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在请求中使用的用户代理问题。

更新

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

4

1 回答 1

2

请参阅 PHP 文档中关于gzinflate()的注释,特别是关于剥离初始字节的注释。最后一条评论对我有用:

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

尽管似乎要剥离的字节数取决于原始编码器。另一篇评论有更彻底的解决方案,并参考RFC1952以供进一步阅读。

显然gzdecode()是为了解决这个问题,但它还没有发布。

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

于 2012-06-13T04:15:02.933 回答