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

Java实现HTTP请求

2017-06-08 16:49 344 查看
一、利用RestTemplate来实现

RestTemplate是spring-web封装的一个请求类,基本可以满足一般业务需求。

private static RestTemplate restTemplate = new RestTemplate();
public static final HttpHeaders jsonAndXml;

static {
jsonAndXml = new HttpHeaders();
jsonAndXml.setContentType(MediaType.APPLICATION_JSON_UTF8);
List<MediaType> mediaTypeList = new ArrayList<MediaType>();
mediaTypeList.add(MediaType.APPLICATION_XML);
jsonAndXml.setAccept(mediaTypeList);
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
String response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(jsonAndXml), String.class).getBody();


除了exchange外,RestTemplate有许多可供开发者调用的接口,如传路径变量,参数等。

二、利用apache httpcomponents组件实现

1.导包

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>


2.实现

HttpEntity body = new StringEntity(new Gson().toJson(root), ContentType.create("application/json", Consts.UTF_8));

DefaultBHttpClientConnection conn = null;
try {
HttpProcessor httpProcessor = HttpProcessorBuilder.create().add(new RequestContent()).add(new RequestTargetHost()).add(new RequestConnControl())
.add(new RequestUserAgent("Test/1.1")).add(new RequestExpectContinue(true)).build();
HttpRequestExecutor httpRequestExecutor = new HttpRequestExecutor();

HttpCoreContext coreContext = new HttpCoreContext();

HttpHost host = new HttpHost(HOST, PORT);

coreContext.setTargetHost(host);

conn = new DefaultBHttpClientConnection(8 * 1024);

ConnectionReuseStrategy connectionReuseStrategy = DefaultConnectionReuseStrategy.INSTANCE;

if (!conn.isOpen()) {
Socket socket = new Socket(host.getHostName(), host.getPort());
conn.bind(socket);
}

BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", url);
request.setEntity(body);

System.out.println("URL:" + request.getRequestLine().getUri());

httpRequestExecutor.preProcess(request, httpProcessor, coreContext);

HttpResponse response = httpRequestExecutor.execute(request, conn, coreContext);

httpRequestExecutor.postProcess(response, httpProcessor, coreContext);

System.out.println("响应:" + response.getStatusLine());
System.out.println("响应的body" + EntityUtils.toString(response.getEntity()));
System.out.println("====结束====");

if (!connectionReuseStrategy.keepAlive(response, coreContext)) conn.close();
else System.out.println("保持链接");

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: