2

PHPイメージプロキシスクリプトを作成しています。リクエストした画像の内容をエコーするだけでなく、画像リクエストのヘッダーも同じように再現する必要があります。

私は一方と他方を見てきましたが、両方を一緒に見たわけではありません...そしてこれらのcURLオプションは私を混乱させます。どうすればいいですか?

4

2 に答える 2

1

申し訳ありませんが、何が欲しいのかわかりません。

これは、画像のURL、エコーヘッダーから取得し、画像をファイルに保存する例です。

ただし、プロキシが必要な場合は、Webサーバー(Nginx、Apacheなど)を使用する必要があります。PHPは必要ありません。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://img3.cache.netease.com/www/logo/logo_png.png");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://www.163.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$return = curl_exec($ch);
curl_close($ch);

list($header, $image) = explode("\r\n\r\n", $return, 2);

echo $header;

file_put_contents("/tmp/logo.png", $image);
于 2012-05-08T02:47:26.820 に答える
-1

すべてのヘッダー(生のテキストとしてではなく)を次のように取得できますgetallheaders()

次に、それらをつなぎ合わせます。

$headers = "";
foreach (getallheaders() as $name => $value) {
    $headers = "$name: $value\r\n";
}
$headers .= "\r\n"; // Double newline to signal end of headers (HTTP spec)

次に、CURLのようにではなく、ソケット接続を使用するのが最善の方法だと思います。

$response = '';
$fp = fsockopen('example.org', 80);
fputs($fp, $headers);
while (!feof($fp)) {
    $response .= fgets($fp, 128);
}
fclose($fp);

ホスト/リクエストヘッダーを変更する必要がある場合があり(これはあなたが尋ねたように同一のコピーであるため)、リダイレクトフォローを実装する必要がある場合があることに注意してください。

于 2012-05-08T01:02:44.797 に答える