与头PHP卷曲代理?(PHP cURL proxy WITH header?)

2019-09-17 01:50发布

我在做一个PHP图片代理脚本。 我需要它不仅呼应它要求图像的内容,而且还重现相同的图像请求的报头。

我见过一个,另一个,但不能同时在一起......而这些卷曲选项事让我困惑。 我会怎么做呢?

Answer 1:

对不起,我不知道你要的是。

这是从图像的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);


Answer 2:

你可以得到所有的标题(不作为原始文本) getallheaders()

  • http://www.php.net/manual/en/function.getallheaders.php

然后把它们串到一起:

$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);

请注意,您可能需要修改主机/请求头(因为这是相同的副本,当你问),你可能需要实现重定向以下。



文章来源: PHP cURL proxy WITH header?