まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。
この広告は、90日以上更新していないブログに表示しています。
Java で HTTP 通信するときのクライアントライブラリを何にするかいつも悩むのですが、最近google-http-java-client が気になってたのでちょっと使ってみました。 汎用的に HTTP 通信ができればよい、というような用途にはちょうど良さそうです。
数年前からベータ版や RC 版としては存在していましたが、正式にリリースされたのは今年のようです。
Google によって書かれたJava の HTTP クライアントライブラリです。
HTTP トランスポートの抽象化がされており、実際の HTTP 通信を行う低層のライブラリを選択できるのが特徴です。 例えばjava.net.HttpURLConnection
を使ったり、Apache HTTP Client を使ったりできます。
また、リクエストやレスポンスのコンテンツボディのXML やJSON のパースやシリアライズを行う機能も含まれており、便利です。
使用できる環境は、Java 5 以降のJava SE 環境やJava EE 環境、Android 1.5 以降などです。
使用するためには JAR ファイルをライブラリパスに追加するとか、Maven の依存関係管理に追加するとかする必要があります。 2014 年 11 月 8 日現在の最新バージョンは 1.19.0 で、Maven Central Repository に置かれています。
Gradle を使っているならば次のように依存関係を記述すればよいです。
repositories { mavenCentral()}dependencies { compile'com.google.http-client:google-http-client:1.19.0'}
HttpTransport
オブジェクトを用意する。HttpTransport
のcreateRequestFactory
メソッドを呼んでHttpRequestFactory
オブジェクトを生成する。HttpRequestFactory
からHttpRequest
を生成する。HttpRequest
のexecute
メソッドを呼び出してリクエスト実行、レスポンスとしてHttpResponse
を取得。GET リクエストを投げてレスポンスボディを表示する例を Gist に置いてあります。 バージョン 1.19.0 を使用しています。
HttpRequest#setParser
メソッド を使ってObjectParser
インターフェイスを実装したインスタンスをパーサーとして登録しておくと、レスポンスのパースを任せることができます。
ライブラリに含まれているObjectParser
の実装としては、JsonObjectParser
クラス やUrlEncodedParser
クラス があります。
/* 必要な import 文import com.google.api.client.http.GenericUrl;import com.google.api.client.http.HttpResponse;import com.google.api.client.http.UrlEncodedParser;import com.google.api.client.util.GenericData;*/// HttpRequest オブジェクトにパーサーを設定しておく。// (req は HttpRequest オブジェクト)req.setParser(new UrlEncodedParser());// リクエスト実行。HttpResponse res = req.execute();try {// レスポンスのパースを行う。 (上で設定した UrlEncodedParser が使われる。) GenericData d = res.parseAs(GenericData.class);}finally {// (以下略)
上の例ではパース後のクラスとしてGenericData
を使用しましたが、どういうパラメータが渡ってくるかわかっている場合、それを受け取るためのクラスを用意しておいて、フィールドに値を設定させることもできます。
例えば、OAuth 1.0 Protocol の Temporary Credentials を取得するためのリクエストのレスポンスをパースする場合を考えてみましょう。 レスポンスの形式は 「oauth_token=xxxxx&oauth_token_secret=xxxxx&oauth_callback_confirmed=true」 というものであることはわかっているので、次のようなクラスでレスポンスを受け取ることができます。@Key
アノテーション をフィールドに付けることで、パースした結果を受け取るフィールドであることを示しています。
/* 必要な import 文import com.google.api.client.util.GenericData;import com.google.api.client.util.Key;*/// 必ずしも GenericData を継承する必要はないが、継承しておけばフィールドで定義されていないパラメータも受け取ることができる。publicclass OAuthTemporaryCredentialResponseextends GenericData {@Key("oauth_token")public String identifier;@Key("oauth_token_secret")public String sharedSecret;@Key("oauth_callback_confirmed")public String callbackConfirmed;}
そして、パース時にこのクラスを指定することでパース結果をOAuthTemporaryCredentialResponse
オブジェクトとして受け取ることができます。
OAuthTemporaryCredentialResponse d = res.parseAs(OAuthTemporaryCredentialResponse.class); System.out.println("identifier: " + d.identifier);// フィールドアクセスによりレスポンスの値にアクセスできる。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。