引言
Http协议的重要性不用多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,使客户端发送Http请求变得容易。我们需要用到两个jar包:httpmime-4.3.5.jar,httpcore-4.3.2.jar
下载地址:httpmime-4.3.5.jar,httpcore-4.3.2.jar
GET请求
public static String get(String url, Map<String, String> params) {
try {
String realUrl = generateUrl(url, params);
HttpClient client = getHttpClient();
HttpGet getMethod = new HttpGet(realUrl);
HttpResponse response = client.execute(getMethod);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader
.readLine()) {
builder.append(s);
}
String result = builder.toString();
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
1)获取HttpClient的代码如下,其中设置了连接超时和读取超时
private final static int CONNET_TIMEOUT = 30 * 1000;
private final static int READ_TIMEOUT = 30 * 1000;
public static HttpClient getHttpClient() {
BasicHttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, CONNET_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParams, READ_TIMEOUT);
HttpClient httpClient = new DefaultHttpClient(httpParams);
return httpClient;
}
2)根据基础url和请求参数拼接请求链接代码如下:
private static String generateUrl(String url, Map<String, String> params) {
StringBuilder urlBuilder = new StringBuilder(url);
if (null != params) {
urlBuilder.append("?");
Iterator<Entry<String, String>> iterator = params.entrySet()
.iterator();
while (iterator.hasNext()) {
Entry<String, String> param = iterator.next();
String key = param.getKey();
String value = param.getValue();
urlBuilder.append(key).append('=').append(value);
if (iterator.hasNext()) {
urlBuilder.append('&');
}
}
}
return urlBuilder.toString();
}
POST请求
public static String post(String url, Map<String, String> params) {
try {
HttpClient client = getHttpClient();
HttpPost postMethod = new HttpPost(url);
List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
if (params != null && params.size() > 0) {
Iterator<Entry<String, String>> iterator = params.entrySet()
.iterator();
while (iterator.hasNext()) {
Entry<String, String> param = iterator.next();
String key = param.getKey();
String value = param.getValue();
BasicNameValuePair pair = new BasicNameValuePair(key, value);
pairs.add(pair);
}
postMethod
.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));
}
HttpResponse response = client.execute(postMethod);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
POST请求-文件上传
public static String post(String url, File file) throws IOException {
HttpClient client = getHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
multipartEntityBuilder.addTextBody("fileName", file.getName());
multipartEntityBuilder.addBinaryBody("uploadFile", file);
HttpEntity httpEntity = multipartEntityBuilder.build();
post.setEntity(httpEntity);
HttpResponse response = client.execute(post);
StringBuffer sb = new StringBuffer();
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity result = response.getEntity();
if (result != null) {
InputStream is = result.getContent();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
String tempLine;
while ((tempLine = br.readLine()) != null) {
sb.append(tempLine);
}
}
}
post.abort();
return sb.toString();
}
POST请求-多文件上传
public static String post(String url, Map<String, String> params,
Map<String, String> files) throws IOException {
HttpClient client = getHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
multipartEntityBuilder.addTextBody(entry.getKey(),
entry.getValue());
}
}
if (files != null && !files.isEmpty()) {
for (Map.Entry<String, String> entry : files.entrySet()) {
File file = new File(entry.getValue());
multipartEntityBuilder.addBinaryBody(entry.getKey(), file);
}
}
HttpEntity httpEntity = multipartEntityBuilder.build();
post.setEntity(httpEntity);
HttpResponse response = client.execute(post);
StringBuffer sb = new StringBuffer();
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity result = response.getEntity();
if (result != null) {
InputStream is = result.getContent();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
String tempLine;
while ((tempLine = br.readLine()) != null) {
sb.append(tempLine);
}
}
}
post.abort();
return sb.toString();
}