1.导入HttpCLient的jar包
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.6</version>
</dependency>
</dependencies>
以下会依次列举常见的几种请求类型 : get , post param , post json , post file
2.GET
/**
* get类型的
*
* @param url
* @throws ClientProtocolException
* @throws IOException
*/
public static void testGet(String url) throws ClientProtocolException, IOException {
// 设置超时时间,单位是秒
RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000)
.setConnectionRequestTimeout(3000).build();
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpget = new HttpGet(url);
httpget.setConfig(defaultRequestConfig);
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println(responseBody);
} finally {
httpclient.close();
}
}
3.POST 参数
/**
* form类型的,传参数
*
* @param url
* @param map 参数
* @throws ClientProtocolException
* @throws IOException
*/
public static void testPostParam(String url,Map<String,String> map) throws ClientProtocolException, IOException {
// 设置超时时间
RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000)
.setConnectionRequestTimeout(3000).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost("http://httpbin.org/post");
post.setConfig(defaultRequestConfig);
// 传参数
List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
for(Entry<String,string> entry: map.entrySet()){
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
HttpEntity ent = new UrlEncodedFormEntity(list, "UTF-8");
post.setEntity(ent);
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
System.out.println(response.getEntity().toString());
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
System.out.println(httpClient.execute(post, responseHandler));
}
4.POST JSON
/**
* post json
*
* @param url 请求地址
* @param jsonStr 请求json字符串
* @throws ClientProtocolException
* @throws IOException
*/
public static void testPostJson(String url,String jsonStr) throws ClientProtocolException, IOException {
// 设置超时时间
RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000)
.setConnectionRequestTimeout(3000).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
post.setConfig(defaultRequestConfig);
// 传json字符串 "{\"key\":\"value\"}"
StringEntity stringEntity = new StringEntity(jsonStr);
stringEntity.setContentType("text/json");
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(stringEntity);
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
System.out.println(httpClient.execute(post, responseHandler));
}
5.POST FILE
/**
* 上传文件
* @param url 上传接口地址
* @param filePath
* @param fileName
* @throws ClientProtocolException
* @throws IOException
*/
public static void testPostFile(String url,String filePath,string fileName) throws ClientProtocolException, IOException {
RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(3000)
.setConnectionRequestTimeout(3000).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
// 设置超时时间
post.setConfig(defaultRequestConfig);
// 传文件
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addTextBody("name", "test");
builder.addBinaryBody("file", new File(filePath), ContentType.DEFAULT_BINARY,
fileName);
post.setEntity(builder.build());
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
System.out.println(httpClient.execute(post, responseHandler));
}
本文详细介绍了使用Apache HttpClient进行HTTP请求的方法,包括GET、POST参数、POST JSON、POST文件等常见请求类型,提供了代码示例并解释了如何设置超时时间。
2535

被折叠的 条评论
为什么被折叠?



