先看代码,方便以后复制,就不作为code格式了。
package com.amazon.commons;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class HttpClientHelper {
public static String RESPONSE_TEXT="responseText";
public static String CHARSET="charset";
public static void main(String[] args) {
System.out.println(get("http://www.baidu.com/").get(HttpClientHelper.RESPONSE_TEXT));
}
public static Map<String, String> get(String url) {
Map<String, String> result=new HashMap<String, String>();
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
// Execute the method.
int statusCode = client.executeMethod(method);
String charset=method.getResponseCharSet();
System.out.println(charset);
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// Read the response body.
/**
* Note: This will cause the entire response body to be buffered in memory.
* A malicious server may easily exhaust all the VM memory.
* It is strongly recommended, to use getResponseAsStream if the content
* length of the response is unknown or resonably large.
*/
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary
// data
result.put(HttpClientHelper.RESPONSE_TEXT, new String(responseBody,charset));
result.put(HttpClientHelper.CHARSET, charset);
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
return result;
}
}
}
查看控制台我们可以看到,百度的页面编码设置是gb2312.
核心代码:
int statusCode = client.executeMethod(method);
String charset=method.getResponseCharSet();
System.out.println(charset);
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset);
result.put(HttpClientHelper.RESPONSE_TEXT, new String(responseBody,charset));
result.put(HttpClientHelper.CHARSET, charset);
这里我之所以把charset作为一个返回参数是有原因的,因为在action或者servlet调用完这个之后如果只返回一个responseText,那么response在打印输出的时候是不知道这段text的编码的,
action代码:
try {
HttpServletResponse response= ServletActionContext.getResponse();
response.setCharacterEncoding(result.get(HttpClientHelper.CHARSET));
PrintWriter writer=response.getWriter();
writer.write(result.get(HttpClientHelper.RESPONSE_TEXT));
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setCharacterEncoding(result.get(HttpClientHelper.CHARSET));这句话不设置就可能导致乱码。
分享到:
相关推荐
综上所述,解决HttpClient乱码问题涉及多个环节,包括正确设置字符编码、理解HTTP头信息、自定义HttpClient配置以及编写健壮的工具类。只有对HTTP通信的各个环节有深入理解,才能有效地处理这类问题,确保数据传输的...
4. 自定义解码:如果以上方式无法解决问题,可以自定义解码逻辑,如使用`InputStreamReader`和`BufferedReader`手动读取字节流并指定字符集。 四、示例代码 以下是一个简单的使用HttpClient发送GET请求并处理乱码的...
在Java开发中,HttpClient是一个广泛使用的HTTP客户端库...了解并应用以上知识点,可以帮助你有效地解决HttpClient在处理中文内容时的乱码问题。在实际项目中,确保每个环节都正确设置字符编码,是避免此类问题的关键。
标题中的"HttpClient应用实例2"指的是使用Apache HttpClient库进行HTTP通信的一个具体示例或教程。HttpClient是一个成熟的Java库,用于执行HTTP请求并处理响应。它提供了丰富的功能,包括支持HTTPS、连接管理、重试...
在读取文件时,需要指定正确的字符编码,否则可能会导致乱码问题。例如,使用InputStreamReader配合FileInputStream读取文件时,需要明确指定文件的编码格式。 接着,导入系统中的路由设计,也就是ImportRouting,...
在Android中,如果服务器返回的数据不是UTF-8编码,而使用了GBK,那么在处理文本时需要进行正确的字符编码转换,以防止乱码问题。 5. **源码解析**: - `HttpGet`对象:创建一个HttpGet实例,设置其请求URL,用于...
在Android客户端向服务器提交请求时,遇到中文乱码问题是一个常见的困扰。...在本例中,使用`URLEncoder`和`URLDecoder`进行编码和解码,有效地解决了Android客户端与Tomcat服务器之间的中文乱码问题。
本资料将深入探讨Java中的汉字编码问题,帮助开发者理解并解决可能出现的乱码现象。 首先,我们需要理解编码的基本概念。编码是将字符转换为二进制表示的过程,而解码则是相反的过程。在Java中,最常用的字符编码...
总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...
总之,处理Android应用中的编码问题,关键在于理解各种编码标准,确保在数据传输过程中始终使用正确的编码,并且在编程时明确指定编码,这样才能有效避免乱码问题。通过以上方法,可以有效地解决Android POST数据时...
总结,解决GET请求中文参数乱码问题的关键在于前端和后端保持一致的编码和解码策略。通过使用`encodeURI()`函数两次编码,并在服务器端正确解码,可以有效避免乱码问题。同时,确保整个应用程序中的字符编码统一也是...
如果网页编码不是GBK,需要根据实际编码来设定,否则可能会出现乱码问题。 最后,我们通常需要关闭HttpEntity和HttpClient以释放资源: ```java EntityUtils.consume(entity); httpClient.getConnectionManager()....
4. 参数编码:在设置请求参数时,确保正确地对字符串进行URL编码,防止乱码问题。 总结,Apache Commons HttpClient 3.1是一个功能强大的HTTP客户端库,虽然在现代开发中可能有更先进的选择,但它仍能满足基本的...
3. **编码解码问题**:处理响应时注意字符编码,防止乱码出现。 总结,HttpClient是Java开发中处理HTTP通信的重要工具,其强大的功能和灵活的配置使其成为开发者的首选。通过深入学习和实践,开发者可以更好地掌握...
8. **国际化与编码**:HttpClient支持多种字符集,当处理不同语言的字符串时,需注意正确的字符编码,如UTF-8、GBK等,避免乱码问题。 在文件`my-httpclient-0.0.2.jar`中,可能包含了HttpClient的定制版本或者扩展...
在本示例中,我们将深入探讨如何使用HttpClient的PostMethod来上传文件,以及处理Get和Post请求中的乱码问题。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许我们构建复杂的HTTP请求。它支持GET、POST...
`EntityUtils.toString()`方法可以将`HttpEntity`内容转化为字符串,指定字符编码避免乱码问题。 ```java String s = EntityUtils.toString(response.getEntity(), "utf-8"); System.out.println(s); ``` 最后,别...
在开发Web应用时,我们经常会遇到中文乱码问题,特别是在JSP与MySQL的结合使用中。这个"mysql.rar_JSP+Mysql_中文乱码"压缩包提供的资源旨在帮助开发者解决此类问题。以下是对这个问题的详细解释和解决方案。 首先...
#### 二、HttpClient的基本功能与使用 ##### 2.1 GET 方法的使用 **步骤1:** 创建 `HttpClient` 的实例 ```java HttpClient httpClient = new HttpClient(); ``` **步骤2:** 创建 GET 方法的实例,并传递待连接...