【问题标题】:php cURL and Instagram Photosphp cURL 和 Instagram 照片
【发布时间】:2012-10-02 23:41:36
【问题描述】:

所以有人在推特上发布了 Instagram 照片的链接:http://instagr.am/p/QSVkR8LS3H/

这将从http://t.co/bOJ4EX2j 重定向到http://instagr.am/p/QSVkR8LS3H/ 到照片所在的实际Instagram 页面http://instagram.com/p/QSVkR8LS3H/

酷。这一切都很好。现在我想要一个 cURL 跟随推文链接并下载包含照片的 的最后一页。脚本看起来基本上是这样的:

 $target = 'http://t.co/bOJ4EX2j';

 $ch = curl_init();

 curl_setopt ($ch, CURLOPT_HTTPGET,        TRUE);
 curl_setopt ($ch, CURLOPT_POST,           FALSE);
 curl_setopt ($ch, CURLOPT_COOKIEJAR,      COOKIE_FILE);   // Defined Constant
 curl_setopt ($ch, CURLOPT_COOKIEFILE,     COOKIE_FILE);
 curl_setopt ($ch, CURLOPT_TIMEOUT,        CURL_TIMEOUT);  // Defined Constant
 curl_setopt ($ch, CURLOPT_USERAGENT,      WEBBOT_NAME);   // Defined Constant
 curl_setopt ($ch, CURLOPT_URL,            $target);       // Target site
 curl_setopt ($ch, CURLOPT_REFERER,        '');            // Referer value
 curl_setopt ($ch, CURLOPT_VERBOSE,        FALSE);         // Minimize logs
 curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);         // No certificate
 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, TRUE);          // Follow redirects
 curl_setopt ($ch, CURLOPT_MAXREDIRS,      4);             // Limit redirections to four
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);          // Return in string

# Create return array
$return_array['FILE']   = curl_exec($ch); 
$return_array['STATUS'] = curl_getinfo($ch);
$return_array['ERROR']  = curl_error($ch);

# Close PHP/CURL handle
curl_close($ch);

return $return_array;

现在这个脚本有更多的组件,但这只是 cURL 部分。现在,它确实设法吐出它降落在图像所在的正确最后一页http://instagram.com/p/QSVkR8LS3H/) 上——但这就是 $return_array['FILE'] 吐出的内容:

 500 Server Error

 An internal server error occurred.

即使您在浏览器中导航到该页面,cookie 已关闭,并且未登录 Instagram(如果您已登录),页面也会完全加载!

我到底想念什么不允许这个 cURL 脚本下载 Instagram 页面?!它几乎适用于我尝试过的所有其他页面!只是不是 Instagram.com?!

请有人帮我解决这个问题 - 我非常感谢任何人可能提供的任何帮助或见解。

【问题讨论】:

  • 我似乎无法复制您的错误,我已复制并尝试使用相同的代码并且它有效。你能检查一下 cURL 是否启用?
  • 我刚刚测试了代码,它似乎工作正常。只有 Instagram 链接不是平面图像,而是整个 HTML 页面……所以你需要抓取页面来抓取图像,否则 $return_array['FILE'] 会返回整个 HTML 页面。
  • 是的,是的,cURL 已启用 - 因为该脚本适用于除 Instagram 照片页面以外的所有其他链接。 @HarryBeasant 我需要它来返回整个 HTML 页面以通过 标签进行解析,请仔细阅读。贾斯汀

标签: php curl instagram


【解决方案1】:

如果您在服务器而不是本地计算机上运行此代码,则服务器和 Instagram.com 之间的代理可能配置错误。检查本地机器上的代码,确保它也可以在同一台机器上的浏览器中运行

如果你得到这个工作并发现,正如贾斯汀伍德所说,你有一个 HTML 页面而不是你想要的图像,我可以帮助你使用一些 PHP 来获取图像 URL(然后你会有运行另一个 cURL 请求)。

【讨论】:

  • 现在有了真正的答案!谢谢@meustrus!我在本地对其进行了测试——在 Instagram 上运行良好——那么它一定是一个配置错误的代理。任何想法我如何解决这个问题?是的,我需要原始 HTML 来解析所有 标签,并找到最大的 img (W x H),因为该脚本将针对多个站点运行,而不仅仅是 Instagram。
  • 是的,服务器的代理没有任何问题...原来 Instagram 已经阻止了我的服务器的 IP?哎呀,一定是做了让他们生气的事情……哈哈
  • 如果您使用的是共享主机,则不一定是您。可能是曾经使用过您主机的 IP 地址的任何人。也可能是他们经常阻止来自服务器的 IP 地址以试图阻止这种图像抓取 - 查看Instagram Developer API
【解决方案2】:

正如我们许多人所说,该代码似乎运行良好。我只能建议您确保打开错误报告,然后检查基本目录中的 PHP 错误日志。

您可能还想检查 cURL 模块是否在 PHP.ini 中启用。

不确定还有什么问题。

【讨论】:

  • Meustrus 关于代理关闭的回答听起来像是真正的问题。我知道 cURL 正在运行,因为它适用于我测试过的所有其他网站,Instagram.com 除外。并且 instagram.com 在本地机器上运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 2015-11-22
  • 2018-07-07
  • 1970-01-01
相关资源
最近更新 更多