WEB拍手ぱちぱちっと
Clap/拍手

01.MENU
Blog  / ブログ
Videos  / 動画
Pictures  / 絵
Game Materials  / 素材
SS(ShortStory)  / 小ネタ

02.MENU
Novels  / 小説
Chat  / チャット
BBS  / 掲示板
Others  / その他
Old Top  / 旧Top

Traffic Jam Products


javaのHttpClientでapiにjsonをpostした話

自分メモもかねて、javaのHttpClientでapijsonをpostした話を書きます。

文字化けにも見舞われたので、その回避の話も書いておきます(回避というほどじゃないけど)

……なんか横文字が多いとルー大柴みたいですね(何

 

javaのHttpClientでapijsonをpostした話

 

javaapijsonを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

 

では今日はここまで!

 

 

 

 

 

 

 

Official LINE Account
友だち追加
@hgf7288s