2012-03-03 6 views
1

私はブラウザにいくつかのPHPコードを実行しています。CURLでgz形式のWebページをダウンロードする

google.comのようなURLに移動すると、ドキュメントがここに移動したことがわかります。 。つまり別のGoogleリンクに移動します。

私はcURLの位置をtrueに設定します。

また、クエリが実際に通過すると、ブラウザはウェブページを.gzファイルにダウンロードします。

助けてください。私はそれをダウンロードしたくありません。私はそれを表示したい。

curl_setopt($ch, CURLOPT_URL, trim("http://".trim($host).$q)); 
curl_setopt($ch, CURLOPT_PORT, intval(trim($port))); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $v); 

stackoverflow.comのようなサイトを要求するときにEDIT ::

お使いのブラウザは不正な要求を送りました。 。たとえ4shared.comでも同じことがあります。

HTTPHEADERの配列はcURLにあります。

Array 
(
    [0] => Proxy-Connection: Close 

    [1] => Cache-Control: max-age=0 

    [2] => User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19 

    [3] => Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

    [4] => Accept-Encoding: gzip,deflate,sdch 

    [5] => Accept-Language: en-US,en;q=0.8 

    [6] => Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

    [7] => Cookie: __qca=P0-9 

    [8] => Connection: Close 
) 

これは私が上記で使用したのと同じカールコードです。 CURLOPT_HTTPHEADERを設定する前に、空の文字列にCURLOPT_ENCODINGを設定してみてください:gzipで問題を解決するための

Host: stackoverflow.com         
    Q: /questions/tagged/java 

答えて

2

。問題は、cURLが圧縮された応答を期待していないことです(あなたが受け入れるべきエンコーディングを設定していないので)。しかし、カスタムHTTPヘッダーを使用して圧縮された応答を手動で要求します。

+0

WOW!ありがとうございます!できます。しかし、なぜあなたのブラウザが「悪い要求を送った」と言っているのか、あなたは知っていますか? – Blank

+1

@Blankこの問題は、ソリューションを適用した後にのみ発生するか?その場合、cURLは 'Accept-Encoding'ヘッダを2回送信している可能性があります。 'CURLOPT_VERBOSE'を' true'に設定すると、これが本当かどうかを確認できます。そうであれば、最も簡単な解決策は 'HTTPHEADER'配列からヘッダを取り除くことです。もしそうでなければ、ヘッダにはおそらく別の問題があります。何が起こっているのかを見るために、少しずつデバッグする必要があります。 –

+0

コードの前にはありませんでした。あなたのコードはgz形式のウェブページのダウンロードを修正しました。 – Blank

関連する問題