用虚假引用者抓取图像

时间:2010-06-10 16:45:05

标签: php image http-referer

我现在正在努力抓住一张图片......听起来很傻,但看看这个链接:P

http://manga.justcarl.co.uk/A/Oishii_Kankei/31/1

如果您获得图片网址,则会加载图片。回过头来看,它看起来工作正常,但这只是浏览器加载缓存的图像。

该应用程序之前工作正常,我认为他们对他们的图像实施了某种Referer检查。所以我找到了一些代码并提出了以下内容......

$ref = 'http://www.thesite.com/'; 
$file = 'theimage.jpg';
$hdrs = array( 'http' => array(
 'method' => "GET",
 'header'=> "accept-language: en\r\n" . 
  "Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*\/*;q=0.5\r\n" .
  "Referer: $ref\r\n" . // Setting the http-referer
  "Content-Type: image/jpeg\r\n" 
 )
);
// get the requested page from the server
// with our header as a request-header
$context = stream_context_create($hdrs);

$fp = fopen($imgChapterPath.$file, 'rb', false, $context);
fpassthru($fp);
fclose($fp);

基本上它正在组成一个错误的推荐者。我回来的只是一堆胡言乱语(感谢fpassthru),所以我认为这是获得图像,但我不敢说我​​不知道​​如何输出/显示收集的图像。

1 个答案:

答案 0 :(得分:0)

在拨打fpassthru之前尝试拨打电话:

header('Content-Type: image/jpeg');

这将告诉您的浏览器接下来的数据是JPEG图像。否则PHP会自动说它是HTML文档,这显然是错误的。

注意:请记住,在向浏览器输出任何其他内容之前,必须先调用header,这意味着您无法拥有任何echo或{{1}在致电print之前调用,并且在打开header标记之前您根本没有任何内容。