HttpClient setHeader和addHeader有什么区别?

时间:2018-10-30 19:03:15

标签: java apache-commons-httpclient

使用Apache HttpClient版本时:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

setHeader和addHeader有什么区别?

    httpPost.addHeader("AuthenticationKey",authenticationKey);
    httpPost.addHeader("Content-Type","application/json");

    httpPost.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
    httpPost.setHeader("Pragma", "no-cache"); // HTTP 1.0
    httpPost.setHeader("X-Requested-With", "XMLHttpRequest"); // mimics a browser REST request

4 个答案:

答案 0 :(得分:3)

如果标题的名称相同,则

setHeader方法将覆盖标题。但 addHeader方法没有。即使标题名称相同,也会添加标题。

答案 1 :(得分:3)

您可以从文档中阅读:

addHeader(String name, String value

  

在此消息中添加标题。标头将被添加到列表的末尾。

setHeader(String name, String value

  

使用相同名称覆盖第一个标头。如果找不到具有给定名称的标头,则新标头将追加到列表的末尾。

答案 2 :(得分:1)

addHeader :向该消息添加标题。标头将被添加到列表的末尾。

setHeader :用相同的名称覆盖第一个标头。如果找不到具有给定名称的标头,则新标头将追加到列表的末尾。

来自http://www.bachcentral.com/midiindexcomplete.html

答案 3 :(得分:1)

这是两种方法的签名信息:

**addHeader**
public void addHeader(String name,
                      String value)
Description copied from interface: HttpMessage
Adds a header to this message. The header will be appended to the end of the list.



**setHeader**
public void setHeader(String name,
                              String value)
Description copied from interface: HttpMessage
Overwrites the first header with the same name. The new header will be appended to the end of the list, if no header with the given name can be found.

从这些方法的描述中,我们可以了解到setHeader()将用给定的新标题信息替换现有的标题数据,因为addHeader()只是添加具有给定名称的标题。