[英]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.