こんにちわ。 山口です。
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 という文字列が含まれているだけで全て正しいレスポンスでは無くなってしまいます。
(どんだけ仲悪いんだよ...)
対策
ただただ気をつけるのみである...
ユーザエージェントでフィルタされてるなんて思わなくてこの結論に行き着くまでメチャクチャ時間がかかりました...
疲れた...