用httpclient模拟登录: 报文最后有一项submit=%B5%C7%C2%BC,也就是登录,如何用httpclient发送?

或者说如何发送%?
我的代码是formparams.add(new BasicNameValuePair("submit","=%B5%C7%C2%BC"));,可是捕获后发现不对,数据包中%被解析为%25,也即在报文里面最后一项变成了:submit=%25B5%25C7%25C2%25BC
在线等待高手!

第1个回答  2011-04-30
PostMethod postMethod = new PostMethod(url);
// 填入各个表单域的值
NameValuePair[] data = { new NameValuePair("submit", "登录"),
new NameValuePair("other", "其他(如果存在)") };
// 将表单的值放入postMethod中
postMethod.setRequestBody(data);
// 执行postMethod
int statusCode = httpClient.executeMethod(postMethod);追问

我用的httpclient是4.1.1的,有一些变了,没有PostMethod类,被HttpPost取代了。
这种方法我也试过,不过数据包里面的内容变为=%3F%3F,抓包工具用的是Ethereal

追答

哦,中文还得加上下面这句
postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=GBK");
4.1.1没仔细研究过,应该类似

追问

还是不行,其他的字符集我也试了,像ISO-8859-1,gb2312,UTF-X也都不行。
改成这样
formparams.add(new BasicNameValuePair("submit",URLEncoder.encode("登录", "GB2312")));
或者
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams,"GBK");
也不行。
国内外的论坛都找过,也没解决,郁闷中...............

追答

找了点资料看了看:
UrlEncodedFormEntity实例将会使用URL编码来编码参数,生成如下的内容:
param1=value1¶m2=value2

utf-8 也不行?这个编码方式最后的解析结果和你的抓包工具有关系的。
ie默认情况下用的是iso8859-1(不是iso-8859-1),Ethereal有可能默认就是这个编码,但不一定
而且,最后到服务器端是和服务器的编码方式相关的。不用在这里纠结

List formparams = new ArrayList();
formparams.add(new BasicNameValuePair("param1", "value1"));
formparams.add(new BasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
HttpPost httppost = new HttpPost("");
httppost.setEntity(entity);

如果实在不行,时间又紧的话,可以考虑暂时用低版本的包,毕竟不是最新的就是最好的。

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网