PHP cURL代理WITH标头?

时间:2012-05-08 00:03:13

标签: php image curl proxy header

我正在制作一个PHP图像代理脚本。我需要它不仅回显它请求的图像的内容,而且还相同地再现图像请求的标题。

我见过一个,另一个,但不是两个在一起......而这些cURL选项让我很困惑。我该怎么做?

2 个答案:

答案 0 :(得分:1)

抱歉,我不确定你想要什么。

这是从图像网址,回显标题和保存图像到文件的示例。

但是,如果你想要一个代理,你应该使用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);

答案 1 :(得分:-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);

请注意,您可能需要修改主机/请求标头(因为这是一个完全相同的副本,如您所知),您可能需要实现以下重定向。