httpClient发送 返回报文乱码,httpClient发送https请求

httpClient发送 返回报文乱码,返回的报文确实为utf-8,然而用

HttpEntity entity = response.getEntity();

String retule=EntityUtils.toString(entity, "UTF-8");

指定实体的编码返回的报文还是乱码。

 

 

解决办法---------------

①:

HttpEntity entity = response.getEntity()

InputStream  is =entity.getContent();

 

用输出流接收is中的内容就行了,这样的话第三方放回什么内容,此处就会接收到什么内容,不会出现乱码的问题。

 

②:

使用String类的构造方法进行编码转换

String temp=EntityUtils.toString(entity, "UTF-8");

String result=new String(temp.getBytes("ISO-8859-1"),"utf-8")。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public static String sendSSLPostRequest_unitedB2C(String reqURL,

Map<String, String> params) {

String responseContent = null; // 响应内容

HttpClient httpClient = new DefaultHttpClient(); // 创建默认的httpClient实例

X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager

public void checkClientTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

 

public void checkServerTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

}

 

public X509Certificate[] getAcceptedIssuers() {

return null;

}

};

try {

// TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext

SSLContext ctx = SSLContext.getInstance("TLS");

// 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用

ctx.init(null, new TrustManager[] { xtm }, null);

// 创建SSLSocketFactory

SSLSocketFactory socketFactory = new SSLSocketFactory(ctx);

// 通过SchemeRegistry将SSLSocketFactory注册到我们的HttpClient上

httpClient.getConnectionManager().getSchemeRegistry()

.register(new Scheme("https", 443, socketFactory));

// 请求超时

httpClient.getParams().setParameter(

CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);

// 读取超时

httpClient.getParams().setParameter(

CoreConnectionPNames.SO_TIMEOUT, 20000);

HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost

List<NameValuePair> formParams = new ArrayList<NameValuePair>(); // 构建POST请求的表单参数

for (Map.Entry<String, String> entry : params.entrySet()) {

formParams.add(new BasicNameValuePair(entry.getKey(), entry

.getValue()));

}

httpPost.setEntity(new UrlEncodedFormEntity(formParams, "UTF-8"));

 

HttpResponse response = httpClient.execute(httpPost); // 执行POST请求

HttpEntity entity = response.getEntity(); // 获取响应实体

 

ByteArrayOutputStream baos = new ByteArrayOutputStream();

if (null != entity) {

InputStream is = entity.getContent();

 

int len=0;

byte[] b=new byte[2014];

 

   while((len = is.read(b)) !=  -1){

       baos.write(b, 0, len);

   }

}

responseContent=new String(baos.toByteArray());

} catch (Exception e) {

logger.error("HttpClientUtil SSL POST请求异常,堆栈信息如下", e);

} finally {

httpClient.getConnectionManager().shutdown(); // 关闭连接,释放资源

}

return responseContent;

}

 

 

 

你可能感兴趣的:(httpclient,乱码,https发送)