今天开发时,遇到利用Java中HttpClient类以POST方式提交数据,目标收到后中文乱码问题。
请求端代码:
/**
* HttpClient提交参数
* @author sunyunfang@126.com
*/
public static void main(String[] args) throws IOException {
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost("127.0.0.1", 8081, "http");
// 使用POST方式提交数据
HttpMethod method = getPostMethod();
client.executeMethod(method);
// 打印服务器返回的状态
System.out.println(method.getStatusLine());
// 打印结果页面
String response = new String(method.getResponseBodyAsString().getBytes("8859_1"));
// 打印返回的信息
System.out.println(response);
method.releaseConnection();
}
// 使用POST方式提交数据
private static HttpMethod getPostMethod() {
String url = "/PushServer/notification.do?action=sendOneMsg";
NameValuePair message = new NameValuePair("message", "消息内容。");
post.setRequestBody(new NameValuePair[]{message});
return post;
}
// 使用GET方式提交数据
private static HttpMethod getGetMethod() {
return new GetMethod("/PushServer/notification.do?action=sendOneMsg&message=abcd");
}
目标端代码:
/**
* 供MsgServer远程调用
* @param request
* @param response
* @return
* @throws Exception
* @author SunYunfang@126.com
*/
public ModelAndView sendOneMsg(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String message = ServletRequestUtils.getStringParameter(request, "message");
}
这段代码执行后,目标能收到信息,但是中文乱码,也没有找到转码的方法。
经分析,原来使用 NameValuePair 加入的HTTP请求的参数最终都会转化为 RequestEntity 提交到HTTP服务器。接着在PostMethod的父类 EntityEnclosingMethod 中发现,只要重载getRequestCharSet()方法就能设置提交的编码(字符集)。
修正后:
/**
* HttpClient提交参数
* @author SunYunfang@126.com
*/
public static void main(String[] args) throws IOException {
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost("127.0.0.1", 8081, "http");
// 使用POST方式提交数据
HttpMethod method = getPostMethod();
client.executeMethod(method);
// 打印服务器返回的状态
System.out.println(method.getStatusLine());
// 打印结果页面
String response = new String(method.getResponseBodyAsString().getBytes("8859_1"));
// 打印返回的信息
System.out.println(response);
method.releaseConnection();
}
// 使用POST方式提交数据
private HttpMethod getPostMethod() {
String url = "/PushServer/notification.do?action=sendOneMsg";
PostMethod post = new UTF8PostMethod(url);
NameValuePair message = new NameValuePair("message", "消息内容。");
post.setRequestBody(new NameValuePair[]{message});
return post;
}
//Inner class for UTF-8 support
public static class UTF8PostMethod extends PostMethod{
public UTF8PostMethod(String url){
super(url);
}
@Override
public String getRequestCharSet() {
//return super.getRequestCharSet();
return "UTF-8";
}
}
// 使用GET方式提交数据
private static HttpMethod getGetMethod() {
return new GetMethod("/PushServer/notification.do?action=sendOneMsg&message=abcd");
}
分享到:
相关推荐
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
在IT行业中,网络请求是应用程序与服务器交互的重要方式,而HttpClient是Java开发中常用的一款HTTP客户端库。然而,处理HTTP响应时,特别是涉及到文本内容时,乱码问题常常困扰着开发者。本文将深入探讨如何使用...
本文将深入探讨如何使用HttpClient来提交数据,以及这两种方法的基本原理和实际应用。 1. **HttpClient简介** Apache HttpClient是一个开源项目,它提供了一个灵活且功能丰富的API,用于执行HTTP请求和处理响应。...
通过上述步骤,你应该能有效地解决HttpClient在发送和接收数据时可能出现的乱码问题。在实际项目中,要结合服务器的响应情况灵活调整编码策略,确保数据传输的准确性。同时,了解并熟练掌握HttpClient的使用,对于...
Java的HttpURLConnection或HttpClient类都可以处理POST请求。在使用HttpURLConnection时,需要设置请求头`Content-Type`为`application/x-www-form-urlencoded;charset=UTF-8`,确保服务器知道数据的编码方式。示例...
我们使用 `new StringEntity(jsonParam.toString(), "utf-8")` 创建了一个新的 `StringEntity` 实例,并指定字符编码为 UTF-8,以避免中文乱码问题。 设置 `StringEntity` 的内容类型为 `application/json`,这是...
当提交包含中文的参数时,如果不进行特殊处理,这些字符将以错误的编码发送,服务器收到后无法正确解析。 服务器端,特别是Tomcat这样的Web应用服务器,通常假设接收到的数据是UTF-8编码的。因此,当它尝试以UTF-8...
HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...
6. **注意服务器端配置**:除了HttpClient客户端的配置,还要确保服务器端也正确处理了字符编码,否则可能出现双向乱码问题。服务器返回的响应头中`Content-Type`应包含字符集信息,通常也是UTF-8。 7. **异常处理*...
在Java编程中,`HttpClient` 是一个非常重要的库,它允许开发者执行HTTP请求,包括GET、POST等。这里我们详细探讨一下如何使用`HttpClient`发送POST请求,以及这个过程中的关键知识点。 首先,我们创建一个`...
### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的...同时,需要注意解决中文乱码等问题,以确保数据传输的准确性。
在Java编程中,中文乱码问题是一个常见的挑战,特别是在处理URL时。URL编码是导致中文乱码的关键因素,因为URL不支持非ASCII字符。本文将深入探讨如何在Java中有效地解决URL中文乱码问题。 首先,我们需要理解URL...
本案例将详细介绍如何使用HttpClient进行GET和POST类型的请求,以及如何解决在处理过程中可能遇到的文件上传和中文乱码问题。 首先,我们需要导入HttpClient相关的依赖。在Maven项目中,可以在pom.xml文件中添加...
此外,对于服务器端的设置也非常重要,确保服务器正确处理接收到的数据,并以正确的字符集返回响应。如果服务器配置不当,即使客户端处理得再好,乱码问题仍可能出现。 总结起来,使用HTTPClient进行文件上传涉及...
本文将深入探讨如何利用Java的HttpClient库在后台模拟发送GET和POST请求,以及如何处理中文乱码问题。 首先,我们来理解GET和POST两种请求方法。GET请求通常用于获取服务器上的资源,它将参数附加到URL中,具有可...
3. **Java网络编程**:使用Java的HttpURLConnection或HttpClient类进行网络请求。这些类允许设置请求头、处理cookies、管理连接超时等。 4. **HTML解析**:为了从HTML页面中提取数据,项目可能使用了HTML解析库,如...
PostMethod是HttpClient中用于执行POST请求的类,适合用来提交数据,包括文件上传。 二、PostMethod上传文件 1. 文件读取:首先,我们需要读取本地文件内容,通常使用FileInputStream或BufferedReader等流式API。 2...
在Android中,如果服务器返回的数据不是UTF-8编码,而使用了GBK,那么在处理文本时需要进行正确的字符编码转换,以防止乱码问题。 5. **源码解析**: - `HttpGet`对象:创建一个HttpGet实例,设置其请求URL,用于...