挨拶
初めての投稿になります。
初回は現場でJavaをつかってWebhookを叩くことがありましたので、備忘録として残します。
題名にある通りHTTPリクエストにJSONを乗せてPOSTする方法を共有します。
初心者の私には一見難しそうに思いましたが、書いてみると単純にHEADERとBODYに要素をつめてWebhookをHTTPリクエストのPOSTで流してあげるだけになります。
(こんな認識ですが。。。間違ってたらご指摘ください)
私と同じく開発ビギナーの方のご参考になれば幸いです!
前提・準備
・JavaでHTTPリクエストを用いてJSONをPOSTで送信します。
・実行したいWebhookのURLを準備します。
・BODYに詰めるJSONコードを用意します。(jsonファイルは作成せずにString型で作成して直接渡します)
・事前に同じファイルにHTTPクライアントを生成するメソッドを作成しています。
まずは実行したいWebhookのurlとJsonコードを用意します。(後述のコードに引数として使います)
String webhookUrl = ""; //WebhookのURLを文字列の変数に代入
String json = ""; //JSONコードを文字列の変数に代入
これでAPIをリクエストするのに必要な要素は準備できました。
あとはHEADERの"Content-type"に"application/json"を設定して
BODYにJSONをつめてAPIのURLにPOSTリクエストするだけです。
その前にHTTPクライアントを生成しましょう。
HTTPクライアントを生成
public static DefaultHttpClient createHttpClient() {
DefaultHttpClient httpClient = new DefaultHttpClient();{
HttpParams httpParams = httpClient.getparams();
//タイムアウトの時間を設定(10秒)
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 10000);
ProxySelectorRoutePlanner proxySelectorRoutePlanner =
new ProxySelectorRoutePlanne(httpClient.getConnectionManager().getSchemeRegistry(), ProxySelector.getDefault());
httpClient.setRoutePlanner(proxySelectorRoutePlanner);
return httpClient;
}
これで準備は完璧です。
あとはHTTPリクエストを送信しましょう。
HTTPリクエスト
JSONをPOSTで送信
public static void postJson(String apiUrl, String json) {
DefaultHttpClient httpClient = createHttpClient();
try {
//WebhookのURLを引数に渡します
HttpPost httpPost = new HttpPost(webhookUrl);
//HEADERのNAMEに”Content-Type”, VALUEに”application/json”を設定します
//BODYにString型のJSONを設定します
httpPost.setHeader("Content-Type", "application/json");
StringEntity entity = new StringEntity(jsonCode, "UTF-8");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.excute(httpPost);
HttpEntity httpResponseEntity = httpResponse.getEntity();
EntityUtils.consumeQuietly(httpResponseEntity);
} catch {
throw new RutimeException("callPostJson failed", e)
} finally {
httpClient.getConnectionManager().shutdown();
}
}
コメントにも書いていますが
HttpPostのインスタンスをWebhookを引数に入れて作成し
setHeader()でHEADERを
setEntity()でStringEntity型のJSONをBODY設定しています。
あとは作成したHttpClientのメソッドを使ってhttpPostをリクエストしています。
まとめ
意外と簡単だった印象のWebhook送信。
Httpリクエストのベースさせ押さえておけば工夫しだいでいろんなものを送信できそうな予感。。。
調べてみるといろんな面白いWebhookやAPIが出てきそうなので、いつかまとめて共有できたらなと思います。
みんな大好きポケモンのAPIもあるらしい。。。
ポケモン図鑑でも作ってみようかな