您的位置:首页 > 理论基础 > 计算机网络

httpClient4.3x 使用

2016-01-05 14:23 579 查看

4.3版本简介

1、创建HTTP客户端

CloseableHttpClient client = HttpClientBuilder.create().build();


2、发送基本的GET请求

instance.execute(new HttpGet(“http://www.baidu.com”));


3、获取HTTP响应的状态码

String url = “http://www.baidu.com”;
CloseableHttpResponse response = instance.execute(new HttpGet(url));
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));


4、获取响应的媒体类型

String url = “http://www.baidu.com”;
CloseableHttpResponse response = instance.execute(new HttpGet(url));
String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));


5、获取响应的BODY部分

String url = “http://www.baidu.com”;
CloseableHttpResponse response = instance.execute(new HttpGet(url));
String bodyAsString = EntityUtils.toString(response.getEntity());
assertThat(bodyAsString, notNullValue());


6、配置请求的超时设置

public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException() throws       ClientProtocolException, IOException{
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(50).setConnectTimeout(50)
.setSocketTimeout(50).build();
HttpGet request = new HttpGet(SAMPLE_URL);
request.setConfig(requestConfig);
instance.execute(request);
}


7、发送POST请求

instance.execute(new HttpPost(SAMPLE_URL));


8、为HTTP请求配置重定向

CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
assertThat(reponse.getStatusLine().getStatusCode(), equalTo(301));


9、配置请求的HEADER部分

HttpGet request = new HttpGet(SAMPLE_URL);
request.addHeader(HttpHeaders.ACCEPT, “application/xml”);
response = instance.execute(request);


10、获取响应的HEADER部分

CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
assertThat(headers, not(emptyArray()));


11、关闭或释放资源

response = instance.execute(new HttpGet(SAMPLE_URL));
try{
HttpEntity entity = response.getEntity();
if(entity!=null){
InputStream instream = entity.getContent();
instream.close();
} finally{
response.close();
}


2、工具代码使用

package com.util.net;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

/**
* 网络请求V3.0
* @author yanbumo
*/
public class Net {

HttpClient client;
HttpUriRequest request;
HttpResponse response;

private MultipartEntityBuilder multipartEntityBuilder;
private Map<String, Object> params;

public Net() {
client = HttpClientBuilder.create().build();
}

/**
* 设置请求超时
* @param conTime
* @param socketTime
* @return
*/
public Net setTimeOut(int conTime,int socketTime){
RequestConfig config = RequestConfig.custom().setConnectTimeout(conTime).setSocketTimeout(socketTime).build();
setRequestConfig(config);
return this;
}

public Net setRequestConfig(RequestConfig config){
if(request.getClass().equals(HttpGet.class)){
((HttpGet)request).setConfig(config);
}else if(request.getClass().equals(HttpPost.class)){
((HttpPost)request).setConfig(config);
}
return this;
}

/**
* GET请求
* @param url
* @return
*/
public Net get(String url){
request = new HttpGet(url);
params = new HashMap<>();
return this;
}

/**
* POST 请求
* @param url
* @return
*/
public Net post(String url){
request = new HttpPost(url);
multipartEntityBuilder = MultipartEntityBuilder.create();
return this;
}

/**
* 添加请求头
* @param headers
* @return
*/
public Net addHead(Header...headers){
for (Header header : headers) {
request.addHeader(header);
}
return this;
}

/**
* 添加请求头
* @param name
* @param value
* @return
*/
public Net addHead(String name,Object value){
request.addHeader(name, value.toString());
return this;
}

/**
* 添加Cookie
* @param cookie
* @return
*/
public Net addCookie(String cookie){
return addHead("Cookie", cookie);
}

/**
* 添加参数
* @param name
* @param value
* @return
*/
public Net addParams(String name,Object value){
if(request.getClass().equals(HttpGet.class)){
addParamsGet(name, value);
}else if(request.getClass().equals(HttpPost.class)){
addParamsPost(name, value);
}
return this;
}

private void addParamsGet(String name,Object value){
params.put(name, value);
}

private void addParamsPost(String name,Object object){
if(object.getClass().equals(File.class)){
FileBody body = new FileBody((File)object);
multipartEntityBuilder.addPart(name, body);
}else{
multipartEntityBuilder.addTextBody(name, object.toString());
}
}

/**
* 执行请求
* @return
*/
public Net doRequest(){
try{
if(request.getClass().equals(HttpGet.class)){
doGet();
}else if(request.getClass().equals(HttpPost.class)){
doPost();
}
response = client.execute
bde6
(request);
}catch(Exception e){
e.printStackTrace();
}
return this;
}

private void doGet() throws URISyntaxException{
if(params.isEmpty()){
return;
}
String url = "";
Set<String> keys = params.keySet();
for (String key : keys) {
url += "&" + key + params.get(key);
}
url = url.replaceFirst("&", "?");
HttpGet get = (HttpGet)request;
get.setURI(new URI(get.getURI() + url));
this.request = get;
}

private void doPost(){
HttpPost post = (HttpPost)request;
post.setEntity(multipartEntityBuilder.build());
this.request = post;
}

/**
* 得到返回体
* @return
*/
public HttpResponse getResult(){
return this.response;
}
/**
* 得到Cookie
* @return
*/
public Header[] getCookie(){
return response.getHeaders("Set-Cookie");
}

/**
* 得到返回字符串
* @return
*/
public String getStr(){
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
try{
return EntityUtils.toString(response.getEntity());
}catch(Exception e){
return null;
}
}
return response.getStatusLine().getStatusCode() + "";
}
/**
* 下载文件 (单个文件)
* @param filePath
* @return
*/
public File getFile(String filePath){
try{
File file = new File(filePath);
if(! file.exists()){
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
file.createNewFile();
}
InputStream inputStream = response.getEntity().getContent();
OutputStream outputStream = new FileOutputStream(file);
int index = 0;
byte[] btys = new byte[4096];
while(( index = inputStream.read( btys)) != -1){
outputStream.write( btys, 0, index);
}
inputStream.close();
outputStream.flush();
outputStream.close();
return file;

}catch(Exception e){
return null;
}
}

}


测试用例

Net net = new Net();
Header[] cookies = net.post("http://host:8080/user/login")
.addParams("username", "username").addParams("pswd", "pswd")
.doRequest().getCookie();
String rs = net.get("http://host:8080/sign/mysignpage=1&step=1000&type=1")
.addHead(cookies).setTimeOut(10, 1000)
.doRequest().getStr();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  httpclient