0

この CrunchBase API ページを PHP の文字列として取得しようとしています。ブラウザーでそのページにアクセスすると、完全な応答 (約 230K 文字) が返されます。ただし、スクリプトでページを取得しようとすると、応答がはるかに短くなります (サーバーで 24341 文字、ローカルで 36629 文字、他の長い CrunchBase ページの文字数とまったく同じです)。ページを取得するために、 Drupal を使用していませんが、drupal_http_request()とほぼ同じ関数を使用しています。(私も cURL と file_get_contents() を使用してみましたが、同じ結果が得られました。今考えてみると、過去に Python の CrunchBase で同じことを経験しました。)

何が原因で、どうすれば修正できますか? PHP 5.3.2、アパッチ 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

gzinflate()に関するPHPドキュメントのコメント、特に最初のバイトの削除に関するコメントを参照してください。最後のコメントは私のためにトリックをしました:

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

削除されるバイト数は元のエンコーダーによって異なるようですが。別のコメントには、より徹底的な解決策があり、さらに読むためにRFC1952への参照があります。

明らかにgzdecode()はこの問題に対処することを目的としていますが、まだリリースされていません。

ps-返されたデータがプレーンテキストであるというコメントを削除しました。私は間違っていた。

于 2012-06-13T04:15:02.933 に答える