最近自己在写的一个项目涉及要访问websevice,就涉及了httpClient这块的知识,简单的记录一下。
Httpclient要比java.net.URLConnection用着舒服。
写的一个简单的例子来访问某个页面
package me.yndy.srtp.service;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import me.yndy.srtp.vo.Parameter;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
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.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class SimpleHttpClient {
/**
* 发送GET请求
* @param url
* @param param
* @return 返回结果
*/
public String httpGet(String url,String param){
String response = "" ;
if(param!=null&¶m.equals("")){
url+="?"+param;
}
//创建http请求参数
int timeOut = 3000;
int socketTimeout = 3000;
HttpParams httpParams = new BasicHttpParams();
//设置连接超时
HttpConnectionParams.setConnectionTimeout(httpParams, timeOut);
//设置默认的socket连接超时
HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
//通过请求参数构造httpclient实例
HttpClient httpClient = new DefaultHttpClient(httpParams);
//构造get方法的实例
HttpGet httpGet = new HttpGet(url);
try {
//发送get请求
HttpResponse httpResponse = httpClient.execute(httpGet);
//获取返回的状态码
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(statusCode==200){
//获取放回的message,并设置为String
response = EntityUtils.toString(httpResponse.getEntity());
}else{
response = "返回码:"+statusCode;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
/**
* 发送POST请求
* @param url
* @param param 参数
* @return 返回结果
*/
public String httpPost(String url,List<Parameter> params){
String response = null;
//创建http请求参数
int timeOut = 3000;
int socketTimeout = 3000;
HttpParams httpParams = new BasicHttpParams();
//设置连接超时
HttpConnectionParams.setConnectionTimeout(httpParams, timeOut);
//设置默认的socket连接超时
HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
//通过请求参数构造httpclient实例
HttpClient httpClient = new DefaultHttpClient(httpParams);
//创建HttpPost实例
HttpPost httpPost = new HttpPost(url);
try {
//设置参数,请求字符串为UTF-8
if(params.size()>0){
httpPost.setEntity(new UrlEncodedFormEntity(createNameValuePair(params),HTTP.UTF_8));
}
//发送Post请求
HttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(statusCode==200){
//获取放回的message,并设置为String
response = EntityUtils.toString(httpResponse.getEntity());
}else{
response = "返回码:"+statusCode;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
/**
* 把Parameter类型集合转换成NameValuePair类型集合
* @param params Parameter:实际就是存放了键值对
* @return
*/
private List<BasicNameValuePair> createNameValuePair(List<Parameter> params){
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
for(Parameter p:params){
BasicNameValuePair pair = new BasicNameValuePair(p.getKey(),p.getValue());
}
return nameValuePairs;
}
}