[英]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.