Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSoup请求后编码_Java_Jsoup - Fatal编程技术网

Java JSoup请求后编码

Java JSoup请求后编码,java,jsoup,Java,Jsoup,我开始使用JSoup来处理我的HTTP请求,现在我有一个问题似乎找不到答案 这是我用于连接的代码,工作正常: Jsoup.connect(uploadsite) .cookies(cookies)urlencoded;charset=UTF-8") .data("Eintrag[]" , panel.teingangsdatum.getText(), "Ticket[]", panel.tticketnr.getText(), "DatumA[]"

我开始使用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
作为内容类型发送内容


我在哪里可以看到jsoup使用的编码以及如何更改编码,或者仅仅添加
.header(“内容类型”,“应用程序/x-www-form-urlencoded;charset=UTF-8”)

您可以通过添加

.header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
按照你的要求

数据需要使用

完整示例:

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检索请求参数,该请求已解码参数):

读取原始数据返回

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

因此,正如Meik Vtune在评论中正确指出的那样,jsoup确实对参数进行了编码。

通过查看
jsoup
的源代码(我刚刚意识到它是公开的),我自己找到了答案

简而言之:是的,Jsoup在
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()
方法调用


虽然它确实在正文中对数据进行编码,但据我所知,它没有设置内容类型。

问题在于Jsoup是否使用所述标题对数据进行编码,或者是否使用了其他内容。这并不能完全回答这个问题。@MeikVtune:JSoup不能“使用头”。头是收件人服务器的,因此它知道在处理响应正文时会发生什么。JSoup无法进行任何编码-它将传递您给它的任何文本。@据我所知,AndreiVolgin编码和解码必须在两侧进行,这意味着仅发送带有内容类型的标题(我不知道JSoup的内容类型)不能作为答案。如果JSoup将
application/x-www-form-urlencoded
中的数据编码为标准,那么它就是工作,这就是我试图找到的。@F.Klein如果你检查我的答案,你会发现
JSoup
确实将所有数据编码为
application/x-www-form-urlencoded
@MeikVtune nice find,我被服务器的输出误导了,因为参数已经被解码了,所以手动编码似乎是正确的方法。现在通过读取服务器中的原始请求数据来验证jsoup请求是否已被编码。
private static final String FORM_URL_ENCODED = "application/x-www-form-urlencoded";