问题概述:
前几天调试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成原有字符串。
解决方案
至今也不知以上的问题原因是什么。后来经对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];
}
}
}
注意
http GET/POST的字符流获取方式是不同的:
如果是get request,则用request.getQueryString()获取;
如果是post request,则用BufferedReader获取。
分享到:
相关推荐
总结,"HttpUtils Java get post 工具类"是用于简化Java中HTTP GET和POST请求的实用工具,它还支持小文件的发送。通过这个工具类,开发者可以快速地进行网络请求,而无需关注底层HTTP连接的复杂性。同时,通过测试类...
Java Web 学习之 Request 对象中 GET 和 POST 的差异 摘要:本文将对 Java Web 中 Request 对象中 GET 和 POST 方法的差异进行分析和比较,通过代码示例和输出结果,展示 GET 和 POST 方法的不同之处,并分析其优...
在Java后台开发中,HTTP请求是与服务器交互的基础,主要包括GET和POST两种主要方式。本文将深入探讨如何在Java中创建一个封装类来处理这两种请求,同时支持多参数和Cookie的处理。 首先,GET和POST是HTTP协议中的两...
《HTTP Programming Recipes for Java Bots》是一本专为Java开发者设计的指南,旨在帮助他们熟练地利用HTTP协议编程,创建高效、智能的自动化程序,即Java机器人。这本书深入浅出地探讨了如何通过Java来实现各种HTTP...
在Web开发中,GET与POST是最常见的两种HTTP请求方式,它们在功能、安全性、数据传输等方面存在显著差异。本文将基于提供的文件内容对这两种方法进行详细解析。 #### 1. 基本概念 - **GET**:用于从服务器获取数据...
Spring Boot项目中,RestTemplate是常用的HTTP客户端工具,可以方便地发起GET、POST等HTTP请求。例如,调用一个GET接口的简单代码如下: ```java @Autowired private RestTemplate restTemplate; public String ...
发送XML报文通常涉及到POST或GET请求,这里以POST请求为例,因为POST更适合发送大量数据,如XML文档。 1. **创建XML文档** 在发送XML之前,我们需要先构建XML文档。可以使用DOM(Document Object Model)或者SAX...
以下是一个简单的使用HttpURLConnection实现GET和POST请求的Java代码示例: ```java public class NetworkHelper { public static String makeGetRequest(String url) throws IOException { HttpURLConnection ...
下面将详细讲解这个过程,包括GET和POST方法的使用,以及Session管理。 首先,我们需要了解HTTP协议。HTTP是超文本传输协议,用于在Web上交换信息。它有两种主要的方法:GET和POST。GET方法用于获取资源,参数通过...
4. 安卓系统下,AS IDE get post的使用方法,这个演示程序演示了如何用android java去访问网页,获取网页。 访问的是我的csdn主页,见程序中 streamToString getHtml HttpURLConnection conn = (HttpURLConnection) ...
为了处理 POST 请求中的 XML 数据,`dxServlet.java` 使用了 SAX(Simple API for XML)解析器。SAX 是一种基于事件驱动的 XML 解析方式,非常适合大型文档的解析。它不一次性加载整个 XML 文档到内存中,而是随着...
7. **执行其他需要保持SESSION状态的请求**:现在,当我们创建新的`HttpGet`或`HttpPost`请求时,HttpClient会自动处理Cookie,保持SESSION状态。 ```java HttpGet otherRequest = new HttpGet(...
在Android开发中,GET和POST是两种常见的HTTP请求方法,用于从服务器获取或发送数据。本文将详细探讨这两种方法以及如何处理JSON和XML格式的数据。 首先,GET和POST的主要区别在于它们的使用场景和数据传输方式。...
POST请求是HTTP的五种基本请求方法之一,其他包括GET、PUT、DELETE和HEAD。POST请求通常用来向服务器提交数据,创建新的资源。 在Android中,我们可以通过多种方式实现HTTP POST请求。一种常见的方式是使用...
1. **HTTP基础**:包括HTTP请求方法(GET、POST、PUT、DELETE等)、HTTP状态码、头信息、Cookie管理等基本概念,这些都是构建Java HTTP客户端的基础。 2. **Java HTTP客户端API**:讲解如何使用Java内置的...
该文件夹下project文件可用eclipse for java 直接打开编译。编译是需要注意的是将java-mysql的类库放置在C:\Program Files\Java\jre6\lib\ext路径下。本程序只用到这一个Java外部类库。 在源文件中,DataReceiver....
它可以用于发送HTTP请求,例如GET、POST、PUT、DELETE等。HttpURLConnection可以模拟浏览器的行为,向服务器发送请求,并获取服务器的响应。 二、JAVA通过HttpURLConnection上传文件的方法 下面是一个使用...
在Java编程中,HttpClient库是Apache提供的一款强大的HTTP客户端工具,用于执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站...
这个类通常包含多个方法,用于执行GET和POST请求,并可能包含其他HTTP方法,如PUT、DELETE等。在提供的代码中,`HttpRequester`包含了发送GET和POST请求的方法,它们都调用了同一个内部方法`send()`进行处理。 `...
Apache HttpClient是一个强大的HTTP客户端库,支持多种HTTP方法(GET、POST等)和复杂的HTTP协议特性。在Java项目中,你可以通过Maven或Gradle来添加HttpClient依赖。 以下是一个简单的示例,展示如何使用...