带有HttpClient的自定义HTTP标头

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)

package com.yc.test;import java.util.ArrayList;import java.util.List;import com.yc.tree.ThreeLinkBinTree;import com.yc.tree.ThreeLinkBinTree.Node;/**** author wb**遍历二叉树指的是按某种规律依次访问二叉树的每个节点&#xff0c;对二叉树的遍历过程就是将非线性结…

大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构

Oracle RAC结构Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后&#xff0c;才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处&#xff0c;从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境。Oracle Rac…

java obix_obix协议在java中的配置和使用详解

前言本文主要给大家介绍的是关于obix协议在java中的配置和使用&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧。什么是 oBIX?简单来讲&#xff0c;obix是一种 XML 通讯协议&#xff0c;使用Http Request/Post方式进行数据通…

java7和java8切换_仍不切换到Java 8的6个理由

java7和java8切换Java 8很棒。 期。 但是……在我们有机会玩耍并玩弄它之后&#xff0c;就该退出了&#xff0c;避免吃盐。 所有的好东西都是有代价的&#xff0c;在这篇文章中&#xff0c;我将分享Java 8的主要痛点。请确保在升级和释放7之前您已经意识到了这些痛点。 1.并行…

python求阶乘之和_python计算阶乘前n项和

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 知道公式后就很简单了&#xff0c;利用for循环&#xff0c;第几行i1就等于几&#xff0c;当然python中是没有…

您需要了解的有关UI测试的所有信息

让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么&#xff1f; 接口&#xff0c;当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败&#xff0c;这就是为什么越来越多的人选择对其Web应用程序进行UI测试的原因。 …

python docx库使用样例_Python docx库用法示例分析

本文实例分析了Python docx库用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 打开及保存文件&#xff1a; from docx import Document document Document(test.docx) document.save(test.docx) 添加文本&#xff1a; document.add_paragraph(test text) 调整文本…

使用java理解程序逻辑试卷_《使用Java理解程序逻辑》试题分析

1、在Java中&#xff0c;一下方法属于String类的有()A&#xff1a;insert(int offset,char [] c);B&#xff1a;replace(int start,int end String str);C&#xff1a;split(String regex);D&#xff1a;endsWith(String suffix);正确答案&#xff1a;C、D解析&#xff1a;A&am…

python合并word单元格_python之DataFrame实现excel合并单元格_python

这篇文章主要为大家详细介绍了python之DataFrame实现excel合并单元格&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 在工作中经常遇到需要将数据输出到excel&#xff0c;且需要对其中一些单元格进行合并&#xff0c;比如如下表表格&#xff0c;需要…

java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据

展开全部服务器端源码&#xff1a;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Se…

pooled-jms_Hibernate隐藏的宝石:pooled-lo优化器

pooled-jms介绍 在这篇文章中&#xff0c;我们将揭示一个序列标识符生成器&#xff0c;​​它结合了标识符分配效率和与其他外部系统的互操作性&#xff08;同时访问底层数据库系统&#xff09;。 传统上&#xff0c;有两种序列标识符策略可供选择。 序列标识符&#xff0c;对…

apache geode项目结构_Apache Flink-基于Java项目模板创建Flink应用(流计算和批计算)...

Apache Flink创建模板项目有2种方式&#xff1a;1. 通过Maven archetype命令创建&#xff1b;2. 通过Flink 提供的Quickstart shell脚本创建&#xff1b;关于Apache Flink的环境搭建&#xff0c;请参考相关链接&#xff1a;Apache Flink快速入门-基本架构、核心概念和运行流程A…

使用UriBuilder快速创建URI

如果您有权访问JAX-RS API和项目中的实现&#xff08;很多这样做&#xff09;&#xff0c;则可以使用JAX-RS的UriBuilder通过使用可解析占位符的构建器模式方便地创建URI。 看下面的例子&#xff1a; String host System.getProperty( "host" , "localhost&qu…

python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别

本篇介绍Python中的元组数据类型&#xff0c;文中会讨论元组与列表的区别&#xff0c;元组的声明、赋值及其相关运算。通过本篇的学习&#xff0c;可以达成如下目标。 ● 掌握元组和列表的区别 ● 掌握元组的声明和赋值 ● 掌握适用于元组的相关运算 Python元组和Python列表数据…

mysql的复制订阅_如何删除发布与复制订阅数据库 'distribuion' 的方法

之前因为从VFP数据库中把数据导入到SQL SERVER2000中&#xff0c;用DTS做了发布与复制数据库distribution &#xff0c;现在要把它删除&#xff0c;当在企业管理器中执行删除时&#xff0c;提示下面的错误&#xff1a;Error 3724: cannot drop the database distribution becau…

matlabif语句怎么用_公益心 码客行(2)—— 简单语句

回顾与反思&#xff1a;cout语句的用法关于第一课的思考与实践问题&#xff0c;有答案了吗——请写出这个程序的输出结果。#include using namespace std;int main(){cout<<1<cout<<12<return 0;}提示&#xff1a;输出结果如下。13即&#xff1a;输出项为数值…

java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。

展开全部//时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成//发送者端的电脑参数32313133353236313431303231363533e78988e69d8331333366306533!import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.e…

组织机构代码输入测试用例_测试代码以用于过大的输入

组织机构代码输入测试用例在编写单元测试时&#xff0c;我们主要关注业务的正确性。 我们将竭尽所能&#xff0c;开开心心地走在最前沿。 我们有时会进行微基准测试并衡量吞吐量。 但是经常遗漏的一个方面是当输入过大时我们的代码如何表现&#xff1f; 我们测试了如何处理正常…

python子进程关闭fd_python – 捕获崩溃的子进程的“分段错误”...

shell可能会生成“Segmentation fault”消息.要找出该过程是否被SIGSEGV杀死,请检查proc.returncode -signal.SIGSEGV.如果要查看消息,可以在shell中运行该命令&#xff1a;#!/usr/bin/env pythonfrom subprocess import Popen, PIPEproc Popen(shell_command, shellTrue, st…

layui 分页 固定底部_论layui的使用体验

layui这个东西有收费跟免费版本&#xff0c;当然我在工作当中用的是免费的版本。至于说我为什么要用这个东西了&#xff1f;原因是这样的&#xff0c;当时我们用的是datatables&#xff0c;由于前期工作上没有相关的需求说是要什么表格相关列固定啊&#xff0c;自动统计啊&…