ROUTE 3390

備忘録的な用途で書いていますが、どなたかの役に立つ事があれば嬉しいです。

HttpURLConnectionでハマったこと

Androidアプリの開発に携わるようになったので、ちょっとそちらでハマった話。

アプリからどこぞのAPIを叩く時など、httpやhttpsで通信を行います。
その時利用したのが

java.net.HttpURLConnection

これを使うのがスタンダードみたい。
それでメソッドにはGETやPOST、PUTやDELETEなどを
setRequestMethod(String)で指定するわけだけど、

POSTを使う場合には setDoOutput(true) をしないといけない。
ただしGETの時にtrueを指定しても動作するから、
どんなメソッドを使う時もとりあえずsetDoOutput(true)にしてた。


で、実際使っていたら、GETメソッドでコールするAPI
なぜかPOSTでコールしちゃう端末が現れてしまった。
4.0系の端末だけがPOSTになる。。


明示的にGETを指定しているにも関わらず、POSTになっちゃう。。。
途方に暮れていたら、こんな記事が
http://webdiary.com/tag/setdooutput/
Android4.0から仕様が変わり、
setDoOutput(true)にすると、いくらsetRequestMethod(String)で指定しても
POSTになるらしい。


よく見るとandroid developersのサイトにも書いてあった。
http://developer.android.com/reference/java/net/HttpURLConnection.html



各バージョンでのテストは重要だな〜