🙄

【Kotlin】JSoupでPostの結果HTMLを取得する

2022/03/03に公開

概要

JSoupはJavaでHTMLのスクレイピングをする際に、結構使われるライブラリです。使い方等は[Kotlin] JSoupを使ってHTML解析する方法を参照頂ければイメージがつくと思いますが、JavaのライブラリなのでKotlinでも使用することができます。
今回はKotlinでJsoupを使って、Postのでリクエストを行った後の、HTMLの結果を受け取る方法を紹介したいと思います。

対応

Javaの記事になりますが、How to login to a website using Jsoup (Java)にある通り、JsoupではmethodでPostを指定したり、dataでformDataを設定することができます。また、JSoup Post Request encodingの記事にある通り、Postデータのエンコーディングも設定可能です。

実装サンプル

あくまでサンプルですが、IDとパスワードをPostデータとして送り、HTMLを取得する実装を紹介します。

import org.jsoup.Connection
import org.jsoup.Jsoup
import org.jsoup.nodes.Document

fun getHtmlDocWithForm(url: String, id: String, pw: String): Document? {
    // Postのデータをセット
    val formData = HashMap<String, String>()
    formData.put("id", id);
    formData.put("password", pw);
    // 結果取得
    Jsoup.connect(url)
        .method(Connection.Method.POST)
        .data(formData)
        .ignoreHttpErrors(true)
        .timeout(10 * 1000)
        .header("Content-Type", "application/x-www-form-urlencoded")
        .postDataCharset("UTF-8")
        .execute()
        .parse()
}

Discussion