`

java httpClient 编码问题

 
阅读更多

在跟第三方做接口对接的时候,发现,我加密请求过去的数据,对方总是解密失败。

下面是我使用的请求封装:

public static String sendHttpPost(String httpUrl, String params) {
	// 创建HttpPost
	HttpPost httpPost = new HttpPost(httpUrl);
	
	try {
		// 设置参数
		if (params != null && params.trim().length() > 0) {
			StringEntity stringEntity = new StringEntity(params, "UTF-8");  
			stringEntity.setContentType(CONTENT_TYPE_FORM_URL);
			
			httpPost.setEntity(stringEntity);
		}
		
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	return sendHttpPost(httpPost);
}

以上的请求方法,在请求不加密的数据时都是正常的,但是一旦加密就会导致对方解密失败。

而另一种请求封装却可以:

public static String sendHttpPostByFormEntity(String httpUrl, Map<String, String> paraMap) {
	// 创建HttpPost
	HttpPost httpPost = new HttpPost(httpUrl);
	
	try {
		// 设置参数
		List<NameValuePair> paramList = new ArrayList<NameValuePair>();
		
		for (Map.Entry<String, String> entry : paraMap.entrySet()) {
			paramList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
		}
		
		httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));
		
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	return sendHttpPost(httpPost);
}

很奇怪,明明两种方式,服务器端接收到的请求格式应该都是一样的。

 

于是,经过排查发现,因为使用的StringEntity的时候,contentType使用的是application/x-www-form-urlencoded编码类型,而UrlEncodedFormEntity使用的是类似URLEncoder的编码方式,而URLEncoder的实现是将字符串转换为application/x-www-form-urlencoded MIME格式,所以导致了最终编码上的差异。

最终,如果还是需要使用第一种StringEntity的方式,那么将params进行URL编码即可。

 

 

 

分享到:
评论

相关推荐

    彻底解决httpClient乱码问题

    综上所述,解决HttpClient乱码问题涉及多个环节,包括正确设置字符编码、理解HTTP头信息、自定义HttpClient配置以及编写健壮的工具类。只有对HTTP通信的各个环节有深入理解,才能有效地处理这类问题,确保数据传输的...

    Java HttpClient 全部的jar包

    在HttpClient中,这个库用于处理URL编码和解码,以及在HTTP请求头或参数中可能涉及到的其他编码问题。 3. `commons-collections-3.2.jar`: Apache Commons Collections提供了对Java集合框架的扩展和增强,包括集合...

    Java 使用HttpClient保持SESSION状态

    下面我们将详细探讨如何在Java中使用HttpClient来实现这一目标。 首先,我们需要导入必要的Apache HttpClient库,通常包含以下依赖: ```xml &lt;groupId&gt;org.apache.httpcomponents &lt;artifactId&gt;httpclient ...

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    - 在处理响应时,注意编码问题,例如上述代码中的“UTF-8”。 - 如果在生产环境中使用,建议使用`CloseableHttpClient`代替`DefaultHttpClient`,以利用其更好的资源管理机制。 通过上述示例和解释,你应该能够理解...

    JavaHttpClient实例

    本实例将深入探讨如何在Java中使用HttpClient进行网络通信。 首先,你需要在项目中引入HttpClient的相关依赖。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.httpcomponents ...

    Java中Httpclient需要的jar包(httpclient.jar,httpcore.jar及commons-logging.jar)

    它是HttpClient库的核心部分,包含了HTTP连接管理器、请求和响应模型、传输编码等低级API,为HttpClient提供底层支持。 最后,`commons-logging.jar`是Apache Commons Logging库,它是一个日志抽象层。在HttpClient...

    java httpclient开发所需要的jar文件(全)

    这里提到的压缩包包含了使用Java HttpClient所需的多个关键组件。 1. `apache-mime4j-0.6.jar`: 这个库提供了对MIME消息解析的支持,MIME是一种标准,用于在邮件和网络消息中传输多媒体内容。在HTTP客户端中,它...

    javaeye api [java httpclient版] 简单封装

    JavaEyeClient 封装了这些功能,可能包括预设的请求头设置、自动处理编码问题、更友好的异常处理机制等。 1. **HTTP 请求的基本操作**: - GET 请求:JavaEyeClient 可能提供了一个简单的接口来发送 GET 请求,...

    Java-HttpClient帮助文档

    Java HttpClient是Apache软件基金会的Apache HTTP Components项目中的一个核心组件,它提供了一个强大的、高度可定制的客户端HTTP通信API。这个工具广泛应用于Java开发者中,用于执行HTTP请求,获取响应,处理各种...

    JAVA调用HTTP及httpclient的详细说明

    ### JAVA调用HTTP及httpclient的详细说明 #### 一、引言 在现代软件开发中,客户端和服务端之间的通信通常通过HTTP协议实现。而在Java编程语言中,开发者可以选择多种方式来实现HTTP请求的发送与接收,其中`...

    HttpClient、乱码解决:实例

    在实际使用中,由于网络传输和编码转换的问题,可能会遇到乱码问题。本篇将详细介绍如何使用HttpClient解决乱码问题。 一、HttpClient基本使用 HttpClient主要由以下几个核心组件构成: 1. HttpClient:客户端实例...

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

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

    java httpClient status 400错误的Header中字符不合法(csdn)————程序.pdf

    总结来说,这个Java HttpClient 400错误的问题提醒我们: 1. 在使用FeignClient时,要确保环境一致性,并充分测试跨环境的兼容性。 2. 当遇到HTTP 400错误,要检查请求的结构,包括URL、Header和Body,特别是自定义...

    httpClient需要的jar包

    4. **实体处理**:HttpClient支持对请求和响应中的实体进行编码和解码,如表单数据、JSON、XML等。EntityUtils类提供了读取和解析响应实体内容的方法。 5. **重试和恢复策略**:HttpClient可以通过设置RetryHandler...

    HttpClient所需jar包(全) httpClient.4.13jar

    在Java开发中,HttpClient是一个常用的工具,尤其在处理Web服务或者API调用时。它支持同步和异步操作,可以处理复杂的HTTP协议细节,使开发者能够更专注于业务逻辑而不是网络通信的底层实现。HttpClient库不仅包含了...

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

    HttpClient中文乱码问题的核心在于字符编码不一致或者未明确指定。默认情况下,HttpClient可能使用ISO-8859-1作为编码,而我们的中文字符通常需要UTF-8编码才能正确显示。以下是一些解决HttpClient中文乱码问题的...

    commons-httpclient-3.1.jar

    《Apache HttpClient 3.1详解及其在Java中的应用》 Apache HttpClient是一个强大的HTTP客户端实现库,主要用于构建Java应用程序,以实现对HTTP协议的全面、灵活且高效的处理。在这个专题中,我们将深入探讨Apache ...

    httpclient4上传文件中文乱码问题解决办法代码示例

    服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。

    HttpClient 学习精髓

    ### HttpClient学习精髓 #### 一、简介 HttpClient是Apache Jakarta Common下的一个子项目,它为开发者提供了高效、最新的以及功能丰富的支持HTTP协议的客户端编程工具包。HttpClient支持HTTP协议的最新版本及相关...

    java使用httpclient发送post请求示例

    Java 使用 HttpClient 发送 POST 请求是网络编程中常见的任务,尤其在与 Web 服务进行交互时。Apache HttpClient 是一个强大的库,允许 Java 开发者轻松地执行 HTTP 请求。在这个示例中,我们将深入探讨如何使用 ...

Global site tag (gtag.js) - Google Analytics