1
set_time_limit(0);
$ch = curl_init('http://www.tibia.com/community/?subtopic=highscores&world=Antica');
curl_setopt($ch, CURLOPT_RANGE, '0-999');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
echo $data = curl_exec($ch);//get curl response
curl_close($ch);


出力例は次のとおりです (更新ボタンを押すたびに少し異なります): ÎÁØ›XÖÆàˆÐG=‹tz´O1ª S‡té[ZxF tm[Ô&è–YÝÀ%jÐ'¿½?¿ ǯRb ¢‰Ð{dЪ zp×½=¿ ± ‰þ-üË1}‡=¹Äéͦ¨ÝF%F‹ºßb²#i˜éO¢W> à]û\b ·<6]~ßÿÿ?kv\&¨JuÖÖÞ®PB)¶èWm ƒÁþ~}¿ ÖÜÛö÷wš ÒØ®Õ04IØÜ!õdS€1½ªuHö

CURLOPT_RANGE をコメントアウトするとページが正しく表示される

編集: curl_setopt($ch, CURLOPT_ENCODING, "gzip"); を追加しました。出力は問題ないようですが、範囲が 0 で始まる場合のみです。範囲がたとえば 2000 ~ 3000 の場合、まったく何も出力されません。

編集 2: エラー メッセージは次のとおりです。

4

2 に答える 2

3

gzip されたコンテンツを取得しています。プレーンな HTML を返すことを明示的に指定する必要があります。次のオプションを追加できます。

curl_setopt($ch, CURLOPT_ENCODING, 'deflate');
于 2013-02-12T20:40:52.393 に答える
2

CURLOPT_RANGE を使用したことがありません。これを使用する必要がある理由はありますか?

gzip が 0 から開始した場合にのみ機能する理由は、コンテンツを解凍する必要があるという情報があるためです。範囲を使用する必要がある場合は、各範囲のデータをキャプチャして結合し、gzip を解凍する必要があります。

編集:

いくつかのコメントで、帯域幅を節約するためにデータの一部を取得するために Range を使用していると述べています。Firebug を使用してページを確認したところ、10kb 未満です。すべての画像を合わせると、ほぼ 500k になります。あなたはすでにかなりの節約をしており、ダイヤルアップ インターネット 10kb を使用していない限り、それは何もありません。Range の使用やチャンクの結合について心配する必要はありません。cURL に gzip を処理させてください。

于 2013-02-12T20:26:10.813 に答える