gpt4 book ai didi

android - 尝试使用 JSoup 复制成功的 POST 请求 - 发布到服务器的数据未被解码

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:16 27 4
gpt4 key购买 nike

Http请求头:

Host: www.mysite.com
Content-Type: application/x-www-form-urlencoded
Cookie: bbuserid=XXX; bbpassword=YYY; bbsessionhash=ZZZ
Content-Length: 252

HTTP 请求正文:

message=%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC&securitytoken=XXX&do=postreply&t=483553

工作正常!发布到服务器的数据在另一端被解码,用户看到的原始消息是 äöõüäöõüäöõüäöõü

现在让我们尝试用 JSoup 实现这个具体示例:

//request body 
Map<String, String> datamap = new HashMap<String, String>();
datamap.put(Session.SESSION_SECURITYTOKEN,"XXX");
datamap.put("message", URLEncoder.encode(finalText, "ISO-8859-1"));
datamap.put("do", "postreply");
datamap.put("t", "483553");

//make a post
Jsoup.connect(url)
.header("Content-Type","application/x-www-form-urlencoded")
.timeout(10000)
.cookie(Session.COOKIE_HASH_KEY,session.bbsessionhash)
.cookie(Session.COOKIE_PASSWORD_KEY,session.bbpassword)
.cookie(Session.COOKIE_USERID_KEY,session.bbuserid)
.data(datamap).post();

我的消息已发布,但未被服务器解码。因此,当用户查看他/她看到的消息时:%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC

注意:我正在执行来自 Android 的发布请求并将数据发布到 vBulletin 论坛软件(重播到线程)。

问题: 当我使用 JSoup 发送消息时,服务器将其视为纯文本而不是编码文本。 如何让服务器理解消息参数保存的是编码文本,而不是纯文本?

最佳答案

Jsoup 默认使用 UTF-8 对查询字符串进行 URL 编码。对于当前的 API 版本,您不能在不重建源代码的情况下更改它(它是 org.jsoup.helper.HttpConnection< 中使用的 org.jsoup.helper.DataUtil#defaultCharset 常量类)。你能做的最好的事情是post an issue report请求预先预设字符集的能力。

在那之前,您可以使用 HttpClientURLConnection相反,它允许对发送 HTTP 请求进行更细粒度的控制。您最终可以将其响应作为 InputStream 提供给 Jsoup#parse() 方法。


更新:如果目标网站支持,您可以尝试在Content-Type 请求 header 中明确指定客户端使用的字符集:

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

请注意,您不应该自己使用URLEncoder#encode();让 Jsoup 完成它的工作。

关于android - 尝试使用 JSoup 复制成功的 POST 请求 - 发布到服务器的数据未被解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8058687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com