我想下载受热链接保护的图片。如何使用CURL伪造HTTP标头以表示引用来自其自己的服务器?
我尝试过这个命令但它失败了。我不熟悉PHP,而且帮助很大。
curl -A "Mozilla/5.0" -L -b /tmp/c -c /tmp/c -s 'http://remote-site.com/image.jpg' > image.jpg
选项看起来是CURLOPT_REFERER
curl_setopt
或curl --referer
,但不确定正确的语法。
编辑2:
我得到一个错误,说curl_setopt()期望参数2很长。删除MUTE选项后,错误消失了。
要显示图像,我尝试过此代码,但页面仍为空白。
$image = curl_exec($ch);
curl_close($ch);
fclose($fp);
print '<img src="'.$image.'"/>';
编辑1:
我在Wordpress帖子中输入的代码(我使用插件Insert PHP)
[insert_php]
curl --referer http://www.DOMAIN.com/ -A "Mozilla/5.0" -L -b /tmp -c /tmp -s 'http://www.DOMAIN.com/image.png' > image.png
[/insert_php]
加载页面时出现的错误:
Parse error: syntax error, unexpected ‘<‘ in /public_html/wp-content/plugins/insert-php/insert_php.php(48) : eval()’d code on line 8
答案 0 :(得分:1)
您应该能够将引用指定为curl
的选项,如下所示:
curl --referer http://remote-site.com/ -A "Mozilla/5.0" -L -b /tmp/c -c /tmp/c -s 'http://remote-site.com/image.jpg' > image.jpg
curl的语法很简单:
curl [options...] <url>
注意:由于您已使用-s
指定了静默模式,因此应指定带有--output <file>
参数的输出文件。使用-s
选项,您无法使用输出重定向(> image.jpg
),因为没有输出开始。
更新
您必须在[insert_php]
和[/insert_php]
标记之间插入PHP代码。你现在在那里的字符串不是有效的PHP代码。您必须使用PHP提供的curl_*
函数。您的代码应如下所示:
$ch = curl_init();
$fp = fopen("image.jpg", "w");
curl_setopt($ch, CURLOPT_URL, "http://remote-site.com/image.jpg");
curl_setopt($ch, CURLOPT_MUTE, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/c");
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/c");
curl_setopt($ch, CURLOPT_REFERER, "http://remote-site.com/");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_exec($ch);
curl_close($ch);
fclose($fp);