簡體   English   中英

JSoup Post 請求編碼

[英]JSoup Post Request encoding

我開始使用 JSoup 來處理我的 HTTP 請求,現在我遇到了一個似乎找不到答案的問題。

這是我用於連接的代碼,它工作正常:

Jsoup.connect(uploadsite)
.cookies(cookies)urlencoded;charset=UTF-8")
            .data("Eintrag[]" , panel.teingangsdatum.getText(), "Ticket[]", panel.tticketnr.getText(),
            "DatumA[]", datumteile[2], "DatumB[]", datumteile[1], "DatumC[]", datumteile[0],
            "UhrzeitA[]", panel.tanfangsstunde.getText(), "UhrzeitB[]", panel.tanfangsminute.getText(),
            "UhrzeitC[]", panel.tendstunde.getText(), "UhrzeitD[]", panel.tendminute.getText(),
            "KundeA[]", kdname, "KundeB[]", panel.tkdnr.getText(), "HVT[]", 
            panel.thvt.getText(),
            "Techniker[]", "0", "Art[]", ticketart)
            .method(Method.POST)
            .execute();

我的問題是,為了發送德國 umaults("äÄöÖüÜ"),我需要使用application/x-www-form-urlencoded作為 Content-Type 發送內容。

我在哪里可以看到 jsoup 使用什么編碼以及如何更改編碼,或者只添加.header("Content-Type","application/x-www-form-urlencoded;charset=UTF-8")

通過查看JSoup的源代碼(我才意識到它是公開的),我自己找到了答案。

簡而言之:是的,Jsoup 對application/x-www-form-urlencoded的數據進行application/x-www-form-urlencoded

JSoup使用一個名為HttpConnection的內部幫助程序類,其中

private static final String FORM_URL_ENCODED = "application/x-www-form-urlencoded";

被定義為。 這在名為String setOutputContentType(final Connection.Request req)的內部方法中使用,該方法由execute()方法調用。

雖然它確實對正文中的數據進行了編碼,但據我所知,它沒有設置內容類型。

您可以通過附加來添加其他標題字段

.header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")

根據您的要求。

數據需要使用URLEncoder.encode(String s, String enc)進行編碼

完整示例:

try {
        Response response = Jsoup.connect("http://localhost:8080")
            .method(Method.POST).data("fname", "ÄÖÜ-foobar").data("lname", "äöü1234")
            .header("Content-Type", "application/x-www-form-urlencoded")
            .postDataCharset("UTF-8")
            .execute();
    System.out.println(response.statusCode() + "\n" + response.parse().text());

} catch (IOException e) {
    e.printStackTrace();
}

來自服務器的輸出(使用 Jetty 並通過 Request getParameter(String name)檢索請求參數,它已經對參數進行了解碼):

200
Content Type: application/x-www-form-urlencoded; charset=UTF-8
ÄÖÜ-foobar äöü1234

讀取原始數據返回

fname=%C3%84%C3%96%C3%9C-foobar&lname=%C3%A4%C3%B6%C3%BC1234

因此,正如 Meik Vtune 在評論中正確指出的那樣,jsoup 確實對參數進行了編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM