1.发送请求,并处理返回的响应:
HttpClient httpClient = new DefaultHttpClient(); //创建HttpClient对象
HttpGet httpGet = new HttpGet("url");//使用Get方法(post--->HttpPost)
HttpResponse res = httpClient .execute(httpGet);//调用execute()方法发送请求并返回响应
HttpEntity entity = res.getEntity();//HttpClient将响应的内容封装为HttpEntity
if(entity!=null) {
InputStream instream = entity.getContent();
//.......后续处理
}
2处理响应 从服务器端返回的响应封装为HttpResponse接口。HttpResponse提供了很多方法来读取和设置响应的内容,包括状态吗、HTTP头、和HTTP内容体。HttpClient推荐使用RensponseHandler来处理返回的响应,这样做的最大的好处是框架负责处理HTTP链接,无论请求是否成功,HTTP链接都会释放并返回给连接管理。使用ResponseHandler处理响应的代码如下所示。
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("url");
ResponseHandler<byte[]> handler = new ResponseHandler<byte[]>() {
public byte[] handleResponse(HttpResponse res) throws ClientProtocolException,IOException {
HttpEntity entity = res.getEntity();
if(entity!=null){
return EntityUtils.toByteArray(entity);
else {
teturn null;
}
}
} ;
byte[] response = httpClient.execute(httpGet,handler);
}
3.设置代理 应用程序有时可能需要通过代理访问网络。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost proxy = new HttpPost("url");
httpClient.getPrams().setParameter(ConnRoutePNames.DERAULT_PROXY,proxy);
4.请求重发。在HttpClient框架中提供了HttpRequestRetryHandler接口处理重连的问题,开发者需要实现接口中定义的retryRequest()方法即可。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpRequestRetryHandler handler = new HttpClientRetyHandler(){
public boolean retryRequest(IOException exception,int executionCount,HttpContext context){
if(executionCount>=5){
return false;
}
if(exception instanceof NoHttpResponseException){
return true;
}
if(exception instanceof SSLHandshakeException){
return false;}
HttpRequest request =(HttpRequest) context.getAttribute(ExecuptionContext.HTTP_REQUEST);
boolean idenpotent =!(request instanceif HttpEntityEnclosingRequest);
if(idempotent) {
return true;
}
return false;
}
};
httpClient.setHttpRequestRetryHandler(handler);
}