HTTP POST/GET FOR JAVA

[b]问题概述:[/b]
前几天调试N久前的一个HTTP API,一个问题始终没有解决,当通过http get/post 方式传送一个中文字符时,在接收端不能正确读取字符串的问题,如下:
伪代码如下:
String URL="http://127.0.0.1:8080/access.do";
String content = java.net.URLEncoder.encode("中文测试","GBK");
String params="id=1&content="+content;
通过encode后的字符串为"%D6%D0%CE%C4%B2%E2%CA%D4" 。

接收端输出语句如下:
request.getParameter("content");
但打印出的字符串却不是"%D6%D0%CE%C4%B2%E2%CA%D4",而是其他被转义的字符串,导致不能正确decode成原有字符串。

[b]解决方案[/b]
至今也不知以上的问题原因是什么。后来经对http get/post的研究,做了如下处理:

String httpMethod = request.getMethod();
//如果是get request,则用request.getQueryString()获取request information
String requestInfo = "";
BufferedReader in = null;
if(httpMethod.equals("GET")){
requestInfo = request.getQueryString();
}else{
//如果是post request,则用BufferedReader获取request information
in = new BufferedReader(new InputStreamReader(
request.getInputStream()));
String line = "";
StringBuffer stringValue=new StringBuffer();
while ((line = in.readLine()) != null) {
stringValue.append(line);
}

requestInfo = stringValue.toString();
}
logger.info("requestInfo************* is :"+ requestInfo);
String[] params = requestInfo.split("&");

// 获取params
if(params!=null && params.length>0){
for(int i=0;i<params.length;i++){
if((params[i].indexOf("content=")>=0) && params[i].split("=").length>1){
content= (params[i].split("="))[1];
}
}
}


[b]注意[/b]
http GET/POST的字符流获取方式是不同的:
如果是get request,则用request.getQueryString()获取;
如果是post request,则用BufferedReader获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值