在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