`

Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码

阅读更多
今天开发时,遇到利用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");
	}
分享到:
评论

相关推荐

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    彻底解决httpClient乱码问题

    在IT行业中,网络请求是应用程序与服务器交互的重要方式,而HttpClient是Java开发中常用的一款HTTP客户端库。然而,处理HTTP响应时,特别是涉及到文本内容时,乱码问题常常困扰着开发者。本文将深入探讨如何使用...

    以httpclient方式提交数据

    本文将深入探讨如何使用HttpClient来提交数据,以及这两种方法的基本原理和实际应用。 1. **HttpClient简介** Apache HttpClient是一个开源项目,它提供了一个灵活且功能丰富的API,用于执行HTTP请求和处理响应。...

    HttpClient、乱码解决:实例

    通过上述步骤,你应该能有效地解决HttpClient在发送和接收数据时可能出现的乱码问题。在实际项目中,要结合服务器的响应情况灵活调整编码策略,确保数据传输的准确性。同时,了解并熟练掌握HttpClient的使用,对于...

    解决了中文乱码的http的get和post请求demo

    Java的HttpURLConnection或HttpClient类都可以处理POST请求。在使用HttpURLConnection时,需要设置请求头`Content-Type`为`application/x-www-form-urlencoded;charset=UTF-8`,确保服务器知道数据的编码方式。示例...

    httpclient模拟post请求json封装表单数据的实现方法

    我们使用 `new StringEntity(jsonParam.toString(), "utf-8")` 创建了一个新的 `StringEntity` 实例,并指定字符编码为 UTF-8,以避免中文乱码问题。 设置 `StringEntity` 的内容类型为 `application/json`,这是...

    android客户端向服务器提交请求的中文乱码问题

    当提交包含中文的参数时,如果不进行特殊处理,这些字符将以错误的编码发送,服务器收到后无法正确解析。 服务器端,特别是Tomcat这样的Web应用服务器,通常假设接收到的数据是UTF-8编码的。因此,当它尝试以UTF-8...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...

    解决HttpClient中文乱码问题jar文件

    6. **注意服务器端配置**:除了HttpClient客户端的配置,还要确保服务器端也正确处理了字符编码,否则可能出现双向乱码问题。服务器返回的响应头中`Content-Type`应包含字符集信息,通常也是UTF-8。 7. **异常处理*...

    httpclient发送post请求.docx

    在Java编程中,`HttpClient` 是一个非常重要的库,它允许开发者执行HTTP请求,包括GET、POST等。这里我们详细探讨一下如何使用`HttpClient`发送POST请求,以及这个过程中的关键知识点。 首先,我们创建一个`...

    HttpClient 4文件上传

    ### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的...同时,需要注意解决中文乱码等问题,以确保数据传输的准确性。

    java中文乱码解决之道(8)解决URL中文乱码问题Jav

    在Java编程中,中文乱码问题是一个常见的挑战,特别是在处理URL时。URL编码是导致中文乱码的关键因素,因为URL不支持非ASCII字符。本文将深入探讨如何在Java中有效地解决URL中文乱码问题。 首先,我们需要理解URL...

    httpclient连接第三方接口的实际项目案例

    本案例将详细介绍如何使用HttpClient进行GET和POST类型的请求,以及如何解决在处理过程中可能遇到的文件上传和中文乱码问题。 首先,我们需要导入HttpClient相关的依赖。在Maven项目中,可以在pom.xml文件中添加...

    httpclient 上传文件

    此外,对于服务器端的设置也非常重要,确保服务器正确处理接收到的数据,并以正确的字符集返回响应。如果服务器配置不当,即使客户端处理得再好,乱码问题仍可能出现。 总结起来,使用HTTPClient进行文件上传涉及...

    后台模拟发送GET和POST请求

    本文将深入探讨如何利用Java的HttpClient库在后台模拟发送GET和POST请求,以及如何处理中文乱码问题。 首先,我们来理解GET和POST两种请求方法。GET请求通常用于获取服务器上的资源,它将参数附加到URL中,具有可...

    HttpClient PostMethod 上传文件

    PostMethod是HttpClient中用于执行POST请求的类,适合用来提交数据,包括文件上传。 二、PostMethod上传文件 1. 文件读取:首先,我们需要读取本地文件内容,通常使用FileInputStream或BufferedReader等流式API。 2...

    基于java爬取股票数据的一个项目.zip

    3. **Java网络编程**:使用Java的HttpURLConnection或HttpClient类进行网络请求。这些类允许设置请求头、处理cookies、管理连接超时等。 4. **HTML解析**:为了从HTML页面中提取数据,项目可能使用了HTML解析库,如...

    一个使用HttpClient调用天气预报接口的例程

    在Android中,如果服务器返回的数据不是UTF-8编码,而使用了GBK,那么在处理文本时需要进行正确的字符编码转换,以防止乱码问题。 5. **源码解析**: - `HttpGet`对象:创建一个HttpGet实例,设置其请求URL,用于...

Global site tag (gtag.js) - Google Analytics