Scala で HTTP POST やろうとしてハマったメモ
はてなグラフのAPIを利用するモジュールをScalaで書いてる時に、HTTP POST 周りでちょっとハマったのでメモ。
HTTPライブラリとしてはこちらを利用しました。
Apache HttpComponents - Apache HttpComponents
さて、どこではまったかというと、POSTパラメータのセット。
Javadocやら見てると、それらしいメソッドがあるのでてっきり次のようにして出来るかと思ったら、パラメータ(以下の例だと"value")がセットされていなかった。
- ダメ
//HttpParams にパラメータセット val params = new BasicHttpParams params.setParameter("value", value) //HttpPost を用意し、パラメータをセット val post = new HttpPost("http://hoge.com/fuga/") post.setParams(params) //実行 val client = new DefaultHttpClient val response = client.execute(post)
あれこれ試行錯誤した結果、次のやり方でよいということになった。
- イケル
//NameValuePair のArrayList を用意して、 //そこに BasicNameValuePair を追加していく val params: java.util.List[NameValuePair] = new ArrayList() params.add(new BasicNameValuePair("value",value)) //HttpPost を用意し、パラメータをセット val post = new HttpPost("http://hoge.com/fuga/") post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)) //実行 val client = new DefaultHttpClient val response = client.execute(post)
参考にしたのがJavaのサンプルなので、もっとScalaっぽい書き方ができるのかもしれない。
単純に移植するだけでもJavaに比べて記述がわりと簡潔になるもんだなーという感想。
前者の手法のほうがすっきりするので、なんとかできないかとがんばってはみたものの、結局解決には至らず。
setParameterとはいったい・・・うごごご・・・。
(参考)
HttpClient 4.0-beta2を使う POST編 - Javaと情熱のあいだ
AndroidでPOST通信 | 5ive.blog