某アプリのアクセスログを見ていて、なーんかツイッターからのアクセスが少ないような・・と思ってAPログを見てみると下記エラーがずらっと並んでいた。
2014-1-16 13:13:39.073 FATAL TwitterClient.main : Server returned HTTP response code: 403 for URL: http://api.twitter.com/1.1/statuses/update.json Relevant discussions can be found on the Internet at: http://www.google.co.jp/search?q=b2b52c28 or http://www.google.co.jp/search?q=10981ac7 TwitterException{exceptionCode=[b2b52c28-10981ac7 4ef6906d-026b39e1 4ef6906d-026b39df], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3} Server returned HTTP response code: 403 for URL: http://api.twitter.com/1.1/statuses/update.json Relevant discussions can be found on the Internet at: http://www.google.co.jp/search?q=b2b52c28 or http://www.google.co.jp/search?q=10981ac7 TwitterException{exceptionCode=[b2b52c28-10981ac7 4ef6906d-026b39e1 4ef6906d-026b39df], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3} at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:192) at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61) at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:98) at twitter4j.TwitterImpl.post(TwitterImpl.java:1871) at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:241) at TwitterClient.main(TwitterClient.java:222) Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://api.twitter.com/1.1/statuses/update.json at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:36) at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:156) ... 5 more Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://api.twitter.com/1.1/statuses/update.json at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.HttpURLConnection.getResponseCode(Unknown Source) at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:34) ... 6 more
jsonの中身は以下 {"errors":[{"message":"Bad Authentication data","code":215}]}
なんじゃこりゃ!という事でTwitterAPIのドキュメントを見てみると、
Restricting api.twitter.com to SSL/TLS traffic
というアナウンスがありました。
”2014年1月14日から、OAuthのすべてのステップとすべてのREST APIのリソースを含む、すべてのapi.twitter.comのURLに、TLS / SSL接続の制限が課されます。”
こういうことらしい。
僕が作ったツイートアプリは平文で送信していましたので、この制限に引っかかってエラーになっていました。しかも1日以上経ってからようやく気付きました。
それでは修正しましょう、という訳で、修正方法は単純にツイッターAPIをSSL通信するようにすればよいので、Java+Twitter4J環境の僕の場合は、以下のようにtwitter4j.propertiesに1行追加しただけで対応完了しました。
oauth.consumerKey=xxxxxxxxxxxxxxxxxxxxxx oauth.consumerSecret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx oauth.accessToken=0000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx oauth.accessTokenSecret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx http.useSSL=true ←こいつを追加
以上でうs。