instagram の画像を取得するリクエストの User Agent に Twitter が含まれているとヤバイ

こんにちわ。 山口です。

3日間ぐらい悩まされた問題に終止符が打たれたのでここに記します。

発生していた問題

特定のアプリで instagram の画像を取得しようとすると正しい画像が返ってこない.

例えば

curl -v http://instagram.com/p/fA9uwTtkSN/media/?size=t

というリクエストを送った時には

Location: http://distilleryimage5.ak.instagram.com/5dceebb02c5811e3b57222000a9e07e9_5.jpg

という結果が入ったレスポンスを期待しています。

しかし、なぜか

Location: http://images.instagram.com/transparent.gif

というレスポンスが返ってきてしまう不具合に悩まされていました。

原因

リクエストの User-Agent に twitter という文字列が含まれていた.

一番簡単に再現するには以下のコマンドを実行します。

curl -A 'twitter' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t

見事に

Location: http://images.instagram.com/transparent.gif

というレスポンスが返ってきてしまいます。

恐ろしいことに、以下のどれでも発生します

curl -A 'hoge/Twitter' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t
curl -A 'Twitter' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t
curl -A 'twitter' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t
curl -A 'aa-twitter--a' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t
curl -A 'aatwitter--a' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t
curl -A 'aatwittera' -v http://instagram.com/p/fA9uwTtkSN/media/?size=t

twitter という文字列が含まれているだけで全て正しいレスポンスでは無くなってしまいます。

(どんだけ仲悪いんだよ...)

対策

ただただ気をつけるのみである...

ユーザエージェントでフィルタされてるなんて思わなくてこの結論に行き着くまでメチャクチャ時間がかかりました...

疲れた...