vc httpclient_带有HttpClient的自定义HTTP标头

vc httpclient

vc httpclient

在Apache HTTPClient请求中设置自定义HTTP标头的快速指南。 在HttpRequest上,调用setHeader()方法以将HttpHeaders内容类型设置为JSON。 涵盖各种版本的HttpClient(4.3之前和之后)。

1.简介

在本教程中,您将立即学习如何将自定义HTTP标头设置为HTTPClient Request 。 如果您想学习和更深入,请转到此处的Apache HTTPClient教程部分。

本文中的所有示例,我们将使用域“ http://www.google.com”创建请求。 因为它被视为始终运行。

有时在面试中,会询问“如何使用RequestBuilder发送POST参数?”。

2.根据要求设置标题– 4.3及更高版本

HttpClient 4.3引入了一种新的构建请求的方式RequestBuilder 。 RequestBuilder.get()方法返回请求。 要在HttpRequest上设置标头,我们将在构建器上使用setHeader()方法。

以下示例将标题设置如下。

package com.java.w3schools.blog.HttpClient;

import java.io.IOException;

import org.apache.http.HttpHeaders;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClients;

public class HttpHeaderSetHeaderExample {

 private static String URI = "http://www.google.com";

 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpClient client = HttpClients.custom().build();
  HttpUriRequest request = RequestBuilder.get().setUri(URI)
    .setHeader(HttpHeaders.CONTENT_TYPE, "application/json").build();
  client.execute(request);

  System.out.println("Getting the header info from request");
  System.out.println("request header propery name : " + request.getAllHeaders()[0].getName());
  System.out.println("request header propery value : " + request.getAllHeaders()[0].getValue());

 }

}

输出:

Getting the header info from request
request header propery name : Content-Type
request header propery value : application/json

3.根据要求设置标题-4.3之前

它与4.3版完全不同。 在旧版本中,您需要使用HttpGet类创建请求。 HttpGet的对象被视为请求对象。 在HttpGet上,我们将调用setHeader()方法。 最后,在HttpClient上调用execute()方法。

在下面的示例中,我们将许多属性设置为标头的一部分。

package com.java.w3schools.blog.HttpClient;

import java.io.IOException;

import org.apache.http.Header;
import org.apache.http.HttpHeaders;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

public class HttpHeaderSetHeaderExample4_3Before {

 private static String URI = "http://www.google.com";

 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(URI);
  request.setHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br");
  request.setHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5");
  request.setHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  request.setHeader(HttpHeaders.CONNECTION, "keep-alive");
  request.setHeader(HttpHeaders.CACHE_CONTROL, "max-age=0");
  request.setHeader(HttpHeaders.USER_AGENT,
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0");
  request.setHeader(HttpHeaders.HOST, "http://www.google.com");

  client.execute(request);

  System.out.println("Getting the header info from request before HttpClient 4.3 version.");

  Header[] headers = request.getAllHeaders();

  for (Header header : headers) {
   System.out.println("request header propery : " + header.getName() + " Value : " + header.getValue());

  }

 }

}

输出:

Getting the header info from request before HttpClient 4.3 version.
request header propery : Accept-Encoding Value : gzip, deflate, br
request header propery : Accept-Language Value : en-US,en;q=0.5
request header propery : Accept Value : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
request header propery : Connection Value : keep-alive
request header propery : Cache-Control Value : max-age=0
request header propery : User-Agent Value : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
request header propery : Host Value : http://www.google.com

4.在客户端上设置默认标题

有一个选项可以一次为所有请求设置通用标头。 在这种方法中,设置标头信息仅完成一次。

除了在每个请求上设置标头信息之外,我们还可以将其配置为客户端本身的默认标头。

创建HTTPClient时,调用setDefaultHeaders()方法,该方法采用Header列表并将其设置为每个请求。

当标头对于所有请求都必须相同时(例如自定义应用程序标头),这非常有用。

package com.java.w3schools.blog.HttpClient;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpHeaders;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.HttpParams;

public class HttpHeaderSetHeaderExample4_3Before {

 private static String URI = "http://www.google.com";

 public static void main(String[] args) throws ClientProtocolException, IOException {

  Header header1 = new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json");
  Header header2 = new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br");
  Header header3 = new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5");
  Header header4 = new BasicHeader(HttpHeaders.ACCEPT,
    "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  Header header5 = new BasicHeader(HttpHeaders.CONNECTION, "keep-alive");
  Header header6 = new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0");
  Header header7 = new BasicHeader(HttpHeaders.USER_AGENT,
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0");
  Header header8 = new BasicHeader(HttpHeaders.HOST, "http://www.google.com");

  List<Header> headers = Arrays.asList(header1, header2, header3, header4, header5, header6, header7, header8);
  HttpClient client = HttpClients.custom().setDefaultHeaders(headers).build();
  HttpUriRequest request = RequestBuilder.get().setUri(URI).build();
  client.execute(request);

 }

}

如果您想在请求中添加其他标题,则可以使用针对特定请求的setHeader()方法。

5.例外

如果您尝试访问任何不受支持的操作,例如client.getParams()。

HttpParams allHeaders = client.getParams();

上面的代码产生以下错误。

Exception in thread "main" java.lang.UnsupportedOperationException
 at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211)
 at com.java.w3schools.blog.HttpClient.HttpHeaderSetHeaderExample4_3Before.main(HttpHeaderSetHeaderExample4_3Before.java:40)

六,结论

在本文中,我们已经看到了如何将自定义标头信息设置为HTTP请求。

用于在4.3版及更高版本中的每个请求上设置HTTP标头的示例程序。 并且还将默认设置为客户端中的所有请求。

显示的示例可通过GitHub获得

GitHub代码

引用请求标头

翻译自: https://www.javacodegeeks.com/2020/04/custom-http-header-with-the-httpclient.html

vc httpclient

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的HttpClient是一种用于发送HTTP请求的开源Java库。它提供了许多功能,例如: 1. 支持HTTP协议的所有方法,例如GET、POST、PUT、DELETE等。 2. 支持HTTPS协议,并支持证书验证和安全协议。 3. 支持HTTP连接池,提高了请求的性能。 4. 支持请求和响应的拦截器,可以进行一些自定义的操作。 下面是一个简单的例子,用于发送一个GET请求: ``` // 创建HttpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpGet对象,将url作为参数传入构造函数 HttpGet httpGet = new HttpGet("http://www.example.com"); // 执行请求,获取响应 CloseableHttpResponse httpResponse = httpClient.execute(httpGet); // 从响应中获取状态码 int statusCode = httpResponse.getStatusLine().getStatusCode(); // 从响应中获取响应体 String responseBody = EntityUtils.toString(httpResponse.getEntity()); // 关闭响应和HttpClient对象 httpResponse.close(); httpClient.close(); ``` 以上代码创建了一个默认的HttpClient对象,创建了一个HttpGet对象,并将url传入构造函数。然后,使用HttpClient对象执行请求,并获取响应。在响应中,我们可以获取状态码和响应体。最后,记得关闭响应和HttpClient对象,以释放资源。 除了GET请求,我们还可以使用HttpPost对象来发送POST请求,使用HttpPut对象来发送PUT请求,使用HttpDelete对象来发送DELETE请求等。每个请求对象都有不同的构造函数和方法,可以根据需要进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值