在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.UnsupportedOperationExceptionat 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