通过curl获取用户在PHP中的配置文件图像不起作用

时间:2011-08-26 11:58:31

标签: php image facebook curl facebook-graph-api

我需要用户图像作为PHP中的图像对象 显而易见的选择是执行以下操作:

$url = 'https://graph.facebook.com/'.$fb_id.'/picture?type=large';
$img = imagecreatefromjpeg($url);

这可以在我的测试服务器上运行,但不能在服务器上运行,这个脚本应该最终运行(allow_url_fopen在那里关闭)。

所以我试图通过curl获取图像:

function LoadJpeg($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
  $fileContents = curl_exec($ch);
  curl_close($ch);
  $img = imagecreatefromstring($fileContents);

  return $img;
}

$url = 'https://graph.facebook.com/'.$fb_id.'/picture?type=large';
$img = LoadJpeg($url);

然而,这与图片 无效 例如,使用curl从google.com加载Googles徽标非常有效
有人可以告诉我为什么或告诉我如何实现我想做的事情吗?

2 个答案:

答案 0 :(得分:3)

你必须设置

curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,true);

通过这种方式,您可以找到图像 没有它你会得到一个没有图像的302响应代码,因为它位于响应头的字段“url”中设置的另一个位置。

答案 1 :(得分:1)

  1. 最简单的解决方案:启用allow_url_fopen
  2. Facebook很可能与您的用户代理匹配。
  3. 欺骗它... ...

     // spoofing Chrome
     $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, wie z. B. Gecko) Chrome/13.0.782.215 Safari/525.13.";
    
     $ch = curl_init();
    
     // set user agent
     curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
     // set the rest of your cURL options here
    

    我没有提到这违反了他们的服务条款,可能会导致法律问题,对吗?另外,请务必遵循robots.txt