自分メモもかねて、javaのHttpClientでapiにjsonをpostした話を書きます。
文字化けにも見舞われたので、その回避の話も書いておきます(回避というほどじゃないけど)
……なんか横文字が多いとルー大柴みたいですね(何
javaのHttpClientでapiにjsonをpostした話
javaでapiにjsonをpostしたくなること、ありますよねw
そこで使おうと思ったライブラリが「HttpClient」でした。
apiにpostするだけ、と考えていたのですが
jsonがうまくpostされなかったり、postした jsonの日本語が「???」で文字化けしてしまったりと何となくうまくいかない場所が多々ありました。
そんなこんなで自分メモで以下にコード記載です。
コード
import java.io.IOException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class ApiTest { public void postTest() throws ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("POSTするURL"); //headerをセットする。デフォルトだとISO-8859-1で送信するらしいので、文字コードも指定。 httpPost.setHeader("Content-type", "application/json; charset=UTF-8"); String json = "{\"name\":\"えむ\", \"mail\":\"xxxx\"}"; //データをセットする。文字コードを指定しないと日本語が文字化けしたりする StringEntity entity = new StringEntity(json, "UTF-8"); httpPost.setEntity(entity); //実行 CloseableHttpResponse response = client.execute(httpPost); //HTTPステータスコードを表示 System.out.println("code = " + response.getStatusLine().getStatusCode()); //返ってきたデータを表示 System.out.println(EntityUtils.toString(response.getEntity())); client.close(); } }
***
説明
jsonを送りたいので、headerは
"Content-type", "application/json; charser=UTF-8"
を設定します。
デフォルトですとどうやら日本語が「????」と文字化けしてしまうので「charset=UTF-8」は入れておきましょう。
そしてjsonを送りたいときも
StringEntity entity = new StringEntity(json, "UTF-8");
httpPost.setEntity(entity);
こんな感じでStringEntityの第二引数にUTF-8を指定してあげると良いです。
あとはexecuteすればjsonをpostして、返ってきた値を取得できます。
データを取り出すときのgetEntity()は、close()すると取り出せなくなるので、closeする前に変数に入れるなりしてとっておきましょう。
あとはとってきたデータを煮るなり焼くなりしましょうw
では今日はここまで!