package com.sp2p.util;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class HttpClientHelp {
// 创建默认的httpClient客户端
private HttpClient httpClient = null;
// get模式
private HttpGet httpGet = null;
// post模式
private HttpPost httpPost = null;
// 执行请求,获取服务器响应
private HttpResponse response = null;
// 请求的实体
private HttpEntity entity = null;
// 输入流
private InputStream is = null;
/**
* 释放资源
* @param httpGet
* @param httpPost
* @param httpClient
*/
public void releaseSource(HttpGet httpGet,
HttpPost httpPost, HttpClient httpClient) {
if (httpGet != null) {
httpGet.abort();
}
if (httpPost != null) {
httpPost.abort();
}
if (httpClient != null) {
httpClient.getConnectionManager().shutdown();
}
}
/**
* get方式提交并返回InputStream
* @param url 提交的url
* @param client HttpClient
* @param get HttpGet
* @return
*/
public InputStream byGetMethod(HttpClient client,HttpGet get) {
try {
// 执行请求
response = client.execute(get);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
entity = response.getEntity();
// 将entity返回InputStream
is = entity.getContent();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return is;
}
/**
* @MethodName: byGetMethodToInputStream
* @Param: HttpClientHelp
* @Author: gang.lv
* @Date: 2013-4-6 下午08:20:05
* @Return:
* @Descb: 提交返回流
* @Throws:
*/
public InputStream byGetMethodToInputStream(String url){
StringBuffer buff = new StringBuffer();
// 创建线程安全的httpClient
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
// 创建一个HttpGet请求,作为目标地址。
httpGet = new HttpGet(url);
try {
response = httpClient.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
entity = response.getEntity();
is = entity.getContent();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
releaseSource(httpGet, null, httpClient);
}
return is;
}
/**
* get方式提交并且返回Entity字符串
* @param url 提交的url
* @return
*/
public String byGetMethodToHttpEntity(String url) {
StringBuffer buff = new StringBuffer();
// 创建线程安全的httpClient
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
// 创建一个HttpGet请求,作为目标地址。
httpGet = new HttpGet(url);
try {
response = httpClient.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
entity = response.getEntity();
buff.append(EntityUtils.toString(entity));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
releaseSource(httpGet, null, httpClient);
}
return buff.toString();
}
/**
* Post方式提交并且返回InputStream
* @param url 提交的url
* @param client HttpClient
* @param post HttpPost
* @param params 队列参数
* @param urlEncoded url编码
* @return
*/
public InputStream byPostMethod(HttpClient client,HttpPost post, List<NameValuePair> params,String urlEncoded) {
try {
if(params != null){
// 格式化参数列表并提交
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(params,
urlEncoded);
response.setEntity(uefEntity);
}
response = client.execute(post);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
entity = response.getEntity();
// 将entity返回InputStream
is = entity.getContent();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return is;
}
/**
* Post方式提交并且返回Entity字符串
* @param url 提交的url
* @param client HttpClient
* @param post HttpPost
* @param params 队列参数
* @param urlEncoded url编码
* @return
*/
public String byPostMethodToHttpEntity(String url,
List<NameValuePair> params,String urlEncoded) {
StringBuffer buff = new StringBuffer();
// 创建线程安全的httpClient
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());
// 创建一个HttpGet请求,作为目标地址。
httpPost = new HttpPost(url);
try {
if(params != null){
// 格式化参数列表并提交
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(params,
urlEncoded);
response.setEntity(uefEntity);
}
response = httpClient.execute(httpPost);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
entity = response.getEntity();
buff.append(EntityUtils.toString(entity));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
releaseSource(null, httpPost, httpClient);
}
return buff.toString();
}
}