带有HttpClient的自定义HTTP标头
在Apache HTTPClient請(qǐng)求中設(shè)置自定義HTTP標(biāo)頭的快速指南。 在HttpRequest上,調(diào)用setHeader()方法以將HttpHeaders內(nèi)容類型設(shè)置為JSON。 適用于各種版本的HttpClient(4.3之前和之后)。
1.簡(jiǎn)介
在本教程中,您將立即學(xué)習(xí)如何將自定義HTTP標(biāo)頭設(shè)置為HTTPClient Request 。 如果您想學(xué)習(xí)和更深入,請(qǐng)轉(zhuǎn)到此處的 Apache HTTPClient教程部分。
本文中的所有示例,我們將使用域“ http://www.google.com”創(chuàng)建請(qǐng)求。 因?yàn)樗灰暈槭冀K運(yùn)行。
有時(shí)在面試中,會(huì)詢問“ 如何使用RequestBuilder發(fā)送POST參數(shù) ?”。
2.根據(jù)要求設(shè)置標(biāo)題– 4.3及更高版本
HttpClient 4.3引入了一種新的構(gòu)建請(qǐng)求的方式
RequestBuilder 。 RequestBuilder.get()方法返回請(qǐng)求。 要在HttpRequest上設(shè)置標(biāo)頭,我們將在構(gòu)建器上使用setHeader()方法。
以下示例將標(biāo)題設(shè)置如下。
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/json3.根據(jù)要求設(shè)置標(biāo)題-4.3之前
它與版本4.3完全不同。 在舊版本中,您需要使用HttpGet類創(chuàng)建請(qǐng)求。 HttpGet的對(duì)象被視為請(qǐng)求對(duì)象。 在HttpGet上,我們將調(diào)用setHeader()方法。 最后,在HttpClient上調(diào)用execute()方法。
在下面的示例中,我們將許多屬性設(shè)置為標(biāo)頭的一部分。
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.com4.在客戶端上設(shè)置默認(rèn)頭
有一個(gè)選項(xiàng)可以一次為所有請(qǐng)求設(shè)置通用標(biāo)頭。 在這種方法中,設(shè)置標(biāo)頭信息僅完成一次。
除了在每個(gè)請(qǐng)求上設(shè)置標(biāo)頭信息之外,我們還可以將其配置為客戶端本身的默認(rèn)標(biāo)頭。
創(chuàng)建HTTPClient時(shí),調(diào)用setDefaultHeaders()方法,該方法采用Header列表并將其設(shè)置為每個(gè)請(qǐng)求。
當(dāng)標(biāo)頭對(duì)于所有請(qǐng)求都必須相同時(shí)(例如自定義應(yīng)用程序標(biāo)頭),這非常有用。
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);}} 如果您想在請(qǐng)求中添加其他標(biāo)題,則可以使用
針對(duì)特定請(qǐng)求的setHeader()方法。
5.例外
如果您嘗試訪問任何不受支持的操作,例如client.getParams()。
HttpParams allHeaders = client.getParams();上面的代碼產(chǎn)生以下錯(cuò)誤。
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)六,結(jié)論
在本文中,我們已經(jīng)了解了如何將自定義標(biāo)頭信息設(shè)置為HTTP請(qǐng)求。
用于在4.3及更高版本中的每個(gè)請(qǐng)求上設(shè)置HTTP標(biāo)頭的示例程序。 并且還將默認(rèn)設(shè)置為客戶端中的所有請(qǐng)求。
顯示的示例可通過GitHub獲得
GitHub代碼
引用請(qǐng)求標(biāo)頭
翻譯自: https://www.javacodegeeks.com/2020/04/custom-http-header-with-the-httpclient.html
總結(jié)
以上是生活随笔為你收集整理的带有HttpClient的自定义HTTP标头的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教师资格证报名备案是什么意思(教师资格证
- 下一篇: linux c 命令注入 整改(linu