【发布时间】: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 页面以通过 标签进行解析,请仔细阅读。贾斯汀