使用CloseableHttpClient 发送post或get请求示例
今天的工作安排中有一个需求是让我调用另一个系统的接口,把我们系统产生的消息推送上去。这里我是用了CloseableHttpClient向第三方系统发送一个post请求。
通过自己的实践和查阅资料总结了使用CloseableHttpClient的步骤:
(1) 创建HttpClient对象。
(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
(3) 如果需要发送请求参数,可调用HttpGet同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。
(4) 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
(5) 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
(6) 释放连接。
在这里做一个具体实例模拟一下工作中写的代码:
相关jar包maven依赖如下:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
java代码:
package com.dyz;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
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.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
sendPost("https://www.baidu.com/");
}
public static void sendPost(String url){
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300 * 1000)
.setConnectTimeout(300 * 1000).build();
// 创建post方式请求对象
HttpPost post = new HttpPost(url);
post.setConfig(requestConfig);
// 请求的数据包为raw,设置报文头为Content-Type
post.setHeader("Content-Type", "application/json;charset=utf-8");
Map<String, Object> paramTaskUpdate = new HashMap<String, Object>();
paramTaskUpdate.put("project_id", 1);
paramTaskUpdate.put("label_id", 2);
paramTaskUpdate.put("msg_content", 2);
// 装载参数
StringEntity postingString = new StringEntity(paramTaskUpdate.toString(), "utf-8");
post.setEntity(postingString);
// 执行请求并拿到结果
HttpResponse response = null;
String content = null;
try {
response = httpClient.execute(post);
// 判断返回状态是否正常
int state = response.getStatusLine().getStatusCode();
if (state != HttpStatus.SC_OK) {
System.out.println("connection faild 错误代码:"+state);
}
// 获取结果实体并返回结果
HttpEntity entity = response.getEntity();
content = EntityUtils.toString(entity);
System.out.println(content);
httpClient.close();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
查看运行结果:
注意:
如果是发送get请求,把HttpPost换成HttpGet就行
参考:https://blog.csdn.net/q394895302/article/details/90256482