或者说如何发送%?
我的代码是formparams.add(new BasicNameValuePair("submit","=%B5%C7%C2%BC"));,可是捕获后发现不对,数据包中%被解析为%25,也即在报文里面最后一项变成了:submit=%25B5%25C7%25C2%25BC
在线等待高手!
// 填入各个表单域的值
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);
如果实在不行,时间又紧的话,可以考虑暂时用低版本的包,毕竟不是最新的就是最好的。