下面的部分内容来源于《Unlocking Android》一书:
要了解HTTPClient,我们先看一下如何使用核心类来执行HTTP GET和POST方法请求,此处我们结合使用Apache的ResonseHandler和Android的Handler,在与用户界面不同的线程中发起网络请求。
// new a Handler to receive the response by HTTP request.
private final Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
mPrgressDialog.dismiss();
String result = msg.getData().getString("RESPONSE");
mOutput.setText(result);
};
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.btn);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mOutput.setText("");
performRequest(url);
}
});
mOutput = (TextView) findViewById(R.id.output);
}
// perform HTTP request with HttpRequestHelper asynchronously.
private void performRequest(final String url) {
final ResponseHandler<String> responseHandler = HttpRequestHelper
.getResponseHandlerInstance(mHandler);
// show a ProgressDialog to represent that it is woring now, and it
// will dismiss after receiving response.
mPrgressDialog = ProgressDialog.show(this, "working...",
"performing HTTP request");
new Thread() {
public void run() {
HttpRequestHelper helper = new HttpRequestHelper(
responseHandler);
// use GET method
helper.performGet(url, null, null, null);
};
}.start();
}
/**
* Helper for HTTP request via GET or POST method.
*/
public final class HttpRequestHelper {
private static final int POST_TYPE = 1;
private static final int GET_TYPE = 2;
public static final String CONTENT_TYPE = "Content-Type";
public static final String MIME_FORM_ENCODED = "application/x-www-form-urlencoded";
public static final String MIME_TEXT_PLAIN = "text/plain";
private final ResponseHandler<String> mResponseHandler;
public HttpRequestHelper(ResponseHandler<String> responseHandler) {
mResponseHandler = responseHandler;
}
public void performGet(String url, String user, String pwd,
final Map<String, String> addtionalHeaders) {
performRequest(null, url, user, pwd, addtionalHeaders, null, GET_TYPE);
}
public void performPost(String contentType, String url, String user,
String pwd, Map<String, String> addtionalHeaders,
Map<String, String> params) {
performRequest(contentType, url, user, pwd, addtionalHeaders, params,
POST_TYPE);
}
public void performPost(String url, String user, String pwd,
Map<String, String> addtionalHeaders, Map<String, String> params) {
performRequest(MIME_FORM_ENCODED, url, user, pwd, addtionalHeaders,
params, POST_TYPE);
}
private void performRequest(String contentType, String url, String user,
String pwd, Map<String, String> headers,
Map<String, String> params, int requestType) {
DefaultHttpClient client = new DefaultHttpClient();
if (user != null && pwd != null) {
client.getCredentialsProvider().setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(user, pwd));
}
final Map<String, String> sendHeaders = new HashMap<String, String>();
if (headers != null && !headers.isEmpty()) {
sendHeaders.putAll(headers);
}
if (POST_TYPE == requestType) {
sendHeaders.put(CONTENT_TYPE, contentType);
}
if (!sendHeaders.isEmpty()) {
client.addRequestInterceptor(new HttpRequestInterceptor() {
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
for (String key : sendHeaders.keySet()) {
if (!request.containsHeader(key)) {
request.addHeader(key, sendHeaders.get(key));
}
}
}
});
}
if (POST_TYPE == requestType) {
HttpPost post = new HttpPost(url);
List<NameValuePair> nvps = null;
if (params != null && !params.isEmpty()) {
nvps = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
nvps.add(new BasicNameValuePair(key, params.get(key)));
}
}
if (nvps != null) {
try {
post.setEntity(new UrlEncodedFormEntity(nvps));
} catch (UnsupportedEncodingException e) {
// TODO: handle exception
}
}
execute(client, post);
} else if (GET_TYPE == requestType) {
execute(client, new HttpGet(url));
}
}
private void execute(HttpClient client, HttpRequestBase method) {
try {
client.execute(method, mResponseHandler);
} catch (Exception e) {
BasicHttpResponse erroResponse = new BasicHttpResponse(
new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");
erroResponse.setReasonPhrase(e.getMessage());
try {
mResponseHandler.handleResponse(erroResponse);
} catch (Exception e2) {
// TODO: handle exception
}
}
}
public static ResponseHandler<String> getResponseHandlerInstance(
final Handler handler) {
return new ResponseHandler<String>() {
public String handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
Message message = handler.obtainMessage();
Bundle data = new Bundle();
HttpEntity entity = response.getEntity();
String result = null;
if (entity != null) {
try {
result = EntityUtils.toString(entity);
data.putString("RESPONSE", result);
} catch (IOException e) {
data.putString("RESPONSE", "Error - " + e.getMessage());
}
} else {
StatusLine status = response.getStatusLine();
data.putString("RESPONSE",
"Error - " + status.getReasonPhrase());
}
message.setData(data);
message.sendToTarget();
return result;
}
};
}
}
- 大小: 68.2 KB
分享到:
相关推荐
根据提供的文件内容,本文将介绍Apache HttpClient的相关知识点。Apache HttpClient是一个流行的Java库,...开发者需要通过阅读HttpClient的完整文档来充分利用它的功能,从而开发出健壮、高效的HTTP客户端应用程序。
- **异常处理**:正确捕获和处理HttpClient和HTTPCore可能抛出的异常,确保程序的健壮性。 - **线程安全**:HttpClient对象不是线程安全的,如果要在多线程环境中使用,应为每个线程创建单独的实例或者使用线程安全...
本文将深入讲解如何使用HttpClient来发送HTTP请求,以及相关的源码分析。 首先,让我们了解HttpClient的基本用法。Apache HttpClient库提供了丰富的功能,包括GET、POST、PUT等各种HTTP方法的支持。以下是一个简单...
HttpClient是Apache基金会开发的一个HTTP客户端库,用于在Java应用程序中执行HTTP请求。在这个场景中,我们关注的是如何使用HttpClient的HttpGet方法来传输JSON数据。HttpGet主要用于发起一个HTTP GET请求,通常用于...
HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于处理HTTP请求。HttpClient 4.3版本是对该库的一次重要更新,提供了更多的功能和优化。这个封裝工具类是对HttpClient 4.3进行的二次开发,旨在简化HTTP请求...
HttpClient是Apache软件基金会的一个开源Java库,用于在Java应用程序中执行HTTP请求。它提供了一种高效、灵活且功能丰富的机制,使开发者能够处理HTTP协议,包括GET、POST、PUT等方法,以及处理Cookie、重定向、认证...
总的来说,Apache HttpClient是Java开发者进行HTTP通信的有力工具,通过理解并熟练掌握其核心组件和使用方法,可以极大地提升HTTP服务的开发效率和质量。同时,结合`commons-codec-1.3.jar`和`commons-logging-api-...
HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送Http请求变得容易,而且也方便开发人员测试接口(基于Http协议的),提高了开发的效率,也方便提高代码的健壮性 注意:...
4. **版本兼容性**:由于HttpClient 2.0较老,可能不支持一些新出现的HTTP特性或标准,所以在新项目中,通常推荐使用更新的替代品,如Apache HttpClient 4.x 或者Java 11自带的`java.net.http.HttpClient`。...
《深入理解HTTPClient 4.5.2及依赖库》 在Java开发中,与HTTP通信密切相关的一个重要库就是Apache HttpClient。...在实际开发中,结合这些库的使用,我们可以编写出更加健壮、高效的HTTP客户端代码。
Apache HttpClient是一个广泛使用的Java库,它用于发送HTTP请求并处理HTTP响应。Apache HttpClient 4.5版本是一个重要更新,提供了新的功能和改进,这篇文档提供了全面的指导,介绍了如何使用和配置HttpClient来处理...
Apache HttpClient是一个广泛使用的Java库,它是Apache软件基金会的一部分,主要用于执行HTTP请求。这个"org.apache.http.jar"包包含了HttpClient库的实现,使得开发者能够在Java应用中方便地与HTTP服务器进行交互。...
在这个`httpclient.zip`压缩包中,我们可以看到几个关键的类:`HttpUtils.java`、`HttpDeleteBody.java`和`HttpGetBody.java`,这些都是基于Apache HttpClient实现的HTTP操作的自定义封装。 1. **HttpUtils.java** ...
综上所述,解决HttpClient乱码问题涉及多个环节,包括正确设置字符编码、理解HTTP头信息、自定义HttpClient配置以及编写健壮的工具类。只有对HTTP通信的各个环节有深入理解,才能有效地处理这类问题,确保数据传输的...
在Java编程中,Apache HttpClient库是一个非常常用的工具,用于执行HTTP请求,如GET、POST等。本示例将深入探讨如何使用HttpClient库实现POST请求。首先,我们需要理解POST请求的基本概念,它通常用于向服务器发送...
HttpClient是Apache软件基金会下的一个开源项目,主要用于提供高效的、最新的、功能丰富的HTTP协议客户端编程工具包。HttpClient 4.5作为其重要的版本,针对Java开发者提供了强大的HTTP客户端支持,使得在进行网络...
Java学习资料中的`org.apache....通过理解并熟练使用Apache HttpClient,开发者可以构建高效、健壮的网络应用程序,实现与HTTP服务器的复杂交互。在学习过程中,建议结合实际项目练习,加深对HttpClient的理解和应用。
Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了多种方法来处理HTTP请求,并且支持包括GET、POST在内的各种HTTP方法。本文将详细介绍如何使用 HttpClient 进行文件下载。 #### 二、环境准备与需求...
在Java项目中使用Apache HttpClient,首先需要将`httpcomponents-client-4.5.5.jar`添加到项目的类路径中。这个jar包包含了HttpClient的核心类和其他依赖,例如HTTP协议解析的`httpcore`模块,以及处理HTTP连接管理...
2. **发起HTTP请求**:使用HttpClient的HttpGet或HttpPost方法,向目标URL发起请求。HttpGet用于获取静态页面,HttpPost则常用于提交表单数据。 3. **处理响应**:HttpClient会返回一个HttpResponse对象,其中包含...