我在做一个PHP图片代理脚本。 我需要它不仅呼应它要求图像的内容,而且还重现相同的图像请求的报头。
我见过一个,另一个,但不能同时在一起......而这些卷曲选项事让我困惑。 我会怎么做呢?
我在做一个PHP图片代理脚本。 我需要它不仅呼应它要求图像的内容,而且还重现相同的图像请求的报头。
我见过一个,另一个,但不能同时在一起......而这些卷曲选项事让我困惑。 我会怎么做呢?
对不起,我不知道你要的是。
这是从图像的URL,回声报头获取并保存图像文件的例子。
但是,如果你想有一个代理,你应该使用Web服务器(Nginx的,阿帕奇等),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);
你可以得到所有的标题(不作为原始文本) getallheaders()
然后把它们串到一起:
$headers = "";
foreach (getallheaders() as $name => $value) {
$headers = "$name: $value\r\n";
}
$headers .= "\r\n"; // Double newline to signal end of headers (HTTP spec)
然后,我认为最好的方法是使用一个插座连接,而不是卷曲,像这样:
$response = '';
$fp = fsockopen('example.org', 80);
fputs($fp, $headers);
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
fclose($fp);
请注意,您可能需要修改主机/请求头(因为这是相同的副本,当你问),你可能需要实现重定向以下。