1
1

More than 1 year has passed since last update.

【備忘録】現場でWebhookを送信することがありました。〜HTTPリクエストにJSONを乗せてPOSTする方法〜

Last updated at Posted at 2022-10-18

挨拶

初めての投稿になります。

初回は現場でJavaをつかってWebhookを叩くことがありましたので、備忘録として残します。

題名にある通りHTTPリクエストにJSONを乗せてPOSTする方法を共有します。

初心者の私には一見難しそうに思いましたが、書いてみると単純にHEADERとBODYに要素をつめてWebhookをHTTPリクエストのPOSTで流してあげるだけになります。
(こんな認識ですが。。。間違ってたらご指摘ください:bow_tone3:)

私と同じく開発ビギナーの方のご参考になれば幸いです!

前提・準備

・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クライアントを生成

SendHttpPost.java
    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で送信

SendHttpPost.java
  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もあるらしい。。。

ポケモン図鑑でも作ってみようかな

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1