-1

我想下载一个受热链接保护的图像。如何使用 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_REFERERcurl_setopt,或curl --referer但不确定正确的语法。


编辑 2:

我收到一条错误消息,说 curl_setopt() 期望参数 2 很长。删除静音选项后,错误消失了。

为了显示图像,我尝试了此代码,但页面仍然空白。

$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 ‘&lt;‘ in /public_html/wp-content/plugins/insert-php/insert_php.php(48) : eval()’d code on line 8
4

1 回答 1

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]您必须在and标记之间插入 PHP 代码[/insert_php]。您现在拥有的字符串不是有效的 PHP 代码。您必须使用curl_*PHP 提供的功能。您的代码应如下所示:

$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);
于 2013-07-21T18:49:23.600 回答