1

誰かが Instagram で写真へのリンクをツイートします: http://instagr.am/p/QSVkR8LS3H/

これにより、http://t.co/bOJ4EX2jからhttp://instagr.am/p/QSVkR8LS3H/へ、写真が存在する実際の Instagram ページhttp://instagram.com/p/QSVkR8LS3H/にリダイレクトされます。

涼しい。それはすべて良いことです。ここで、cURL でツイートされたリンクをたどって、写真の < img > を含む最終ページをダウンロードする必要があります。スクリプトは基本的に次のようになります。

 $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 にサインインしていない場合でも (サインインしていた場合)、ページは完全に読み込まれます。

InstagramページをダウンロードするためのcURLスクリプトを許可していないのに、一体何が欠けているのでしょうか?! 私が試した他のほぼすべてのページで機能します。Instagram.comだけじゃない!?

誰かがこの問題を解決するのを手伝ってください-誰かが持っているかもしれない助けや洞察を大いに感謝します.

4

2 に答える 2

1

このコードをローカル マシンではなくサーバーで実行している場合は、サーバーと Instagram.com の間にプロキシの設定が間違っている可能性があります。ローカル マシンのコードをチェックし、同じマシンのブラウザでも動作することを確認します。

これが機能し、ジャスティン・ウッドが言ったように、必要な画像ではなく HTML ページがあることがわかった場合は、PHP を使用して画像 URL を取得するのを手伝うことができます (そのために別の URL を実行する必要があります)。 cURL リクエスト)。

于 2012-10-03T00:01:18.303 に答える
0

私たちの多くが言っているように、そのコードは問題なく動作するようです。私が提案できるのは、エラー レポートがオンになっていることを確認してから、ベース ディレクトリの PHP エラー ログを確認することだけです。

cURL モジュールが PHP.ini で有効になっていることを確認することもできます。

他に何が間違っているのかわかりません。

于 2012-10-02T23:52:16.540 に答える