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进行POST请求,并将数据发布到vBulletin论坛软件(回复主题)。问题:当我使用JSoup发送消息时,服务器将其视为普通文本而不是编码文本。如何让服务器理解消息参数包含编码文本而不是普通文本?
data
方法中对其参数进行编码。因此,在值上使用URLEncoder.encode
会使数据被编码两次。 - McDowellURLEncoder.encode
会将纯文本添加到消息参数中,我失去了需要编码的特定字符。工作的 POST 请求以某种方式告诉服务器,该消息已编码并且您(服务器)必须对其进行解码。但是当我尝试复制它时,服务器将消息视为纯文本。有什么想法,如何使服务器理解消息参数包含编码文本而不是纯文本? - Indrek Kõue