我正在制作一个PHP图像代理脚本。我需要它不仅回显它请求的图像的内容,而且还相同地再现图像请求的标题。
我见过一个,另一个,但不是两个在一起......而这些cURL选项让我很困惑。我该怎么做?
答案 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);
请注意,您可能需要修改主机/请求标头(因为这是一个完全相同的副本,如您所知),您可能需要实现以下重定向。