java设置HTTP请求header的多种实现方式详解

 更新时间:2026年01月05日 08:31:18   作者:悟能不能悟  
在Java中,可以通过多种方式设置HTTP请求的header,具体取决于你使用的是哪种HTTP客户端,以下是几种常见的方法,大家可以根据需要进行选择

在Java中,可以通过多种方式设置HTTP请求的header,具体取决于你使用的是哪种HTTP客户端。以下是几种常见的方法:

1. 使用原生HttpURLConnection

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class HttpURLConnectionExample {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://example.com/api");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
        // 设置请求方法
        connection.setRequestMethod("POST");
        
        // 设置请求头
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("Authorization", "Bearer token123");
        connection.setRequestProperty("User-Agent", "MyApp/1.0");
        connection.setRequestProperty("X-Custom-Header", "CustomValue");
        
        // 设置连接超时
        connection.setConnectTimeout(5000);
        connection.setReadTimeout(5000);
        
        // 发送请求体(如果是POST/PUT)
        connection.setDoOutput(true);
        String jsonInput = "{\"key\": \"value\"}";
        try (OutputStream os = connection.getOutputStream()) {
            byte[] input = jsonInput.getBytes("utf-8");
            os.write(input, 0, input.length);
        }
        
        // 获取响应
        int responseCode = connection.getResponseCode();
        System.out.println("Response Code: " + responseCode);
        
        // 读取响应
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(connection.getInputStream(), "utf-8"))) {
            StringBuilder response = new StringBuilder();
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                response.append(responseLine.trim());
            }
            System.out.println("Response: " + response.toString());
        }
        
        connection.disconnect();
    }
}

2. 使用 Apache HttpClient

首先添加依赖:

<!-- Maven -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;

public class ApacheHttpClientExample {
    public static void main(String[] args) throws Exception {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost("http://example.com/api");
            
            // 设置请求头
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setHeader("Authorization", "Bearer token123");
            httpPost.setHeader("X-Custom-Header", "CustomValue");
            httpPost.setHeader("User-Agent", "MyApp/1.0");
            
            // 设置请求体
            String json = "{\"key\": \"value\"}";
            StringEntity entity = new StringEntity(json);
            httpPost.setEntity(entity);
            
            // 执行请求
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                System.out.println("Status: " + response.getStatusLine());
                String responseBody = EntityUtils.toString(response.getEntity());
                System.out.println("Response: " + responseBody);
            }
        }
    }
}

3. 使用 Spring RestTemplate

import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.util.Collections;

public class RestTemplateExample {
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        
        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Bearer token123");
        headers.set("X-Custom-Header", "CustomValue");
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        
        // 设置请求体
        String requestBody = "{\"key\": \"value\"}";
        HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);
        
        // 发送请求
        ResponseEntity<String> response = restTemplate.exchange(
            "http://example.com/api",
            HttpMethod.POST,
            requestEntity,
            String.class
        );
        
        System.out.println("Status: " + response.getStatusCode());
        System.out.println("Response: " + response.getBody());
    }
}

4. 使用 OkHttp

首先添加依赖:

<!-- Maven -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.3</version>
</dependency>
import okhttp3.*;

public class OkHttpExample {
    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        
        // 创建请求体
        MediaType mediaType = MediaType.parse("application/json");
        String json = "{\"key\": \"value\"}";
        RequestBody body = RequestBody.create(mediaType, json);
        
        // 构建请求
        Request request = new Request.Builder()
            .url("http://example.com/api")
            .post(body)
            .addHeader("Content-Type", "application/json")
            .addHeader("Authorization", "Bearer token123")
            .addHeader("X-Custom-Header", "CustomValue")
            .addHeader("User-Agent", "MyApp/1.0")
            .build();
        
        // 发送请求
        try (Response response = client.newCall(request).execute()) {
            System.out.println("Code: " + response.code());
            System.out.println("Response: " + response.body().string());
        }
    }
}

5. 在Servlet中设置响应头

如果是在Servlet中处理HTTP请求,可以设置响应头:

import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/api")
public class MyServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws IOException {
        
        // 设置响应头
        response.setHeader("Content-Type", "application/json");
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Expires", "0");
        response.setHeader("X-Custom-Header", "CustomValue");
        
        // 或者使用setHeader的便捷方法
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        
        // 添加多个相同名称的头
        response.addHeader("Set-Cookie", "token=abc123");
        response.addHeader("Set-Cookie", "session=xyz789");
        
        // 写入响应体
        response.getWriter().write("{\"status\": \"success\"}");
    }
}

常用HTTP头字段

头字段说明示例
Content-Type请求/响应体类型application/json
Authorization认证信息Bearer token123
User-Agent客户端信息MyApp/1.0
Accept可接受的响应类型application/json
Cache-Control缓存控制no-cache
X-Requested-WithAJAX请求标识XMLHttpRequest

注意事项

  • Content-Type:发送JSON数据时通常设置为 application/json
  • Authorization:用于身份验证,常见格式是 Bearer token
  • 自定义头部:通常以 X-开头,但不是强制要求
  • 字符编码:确保字符编码正确,建议使用UTF-8
  • 敏感信息:避免在URL中传递敏感信息,应放在请求头中

选择哪种方式取决于你的项目需求:

  • 简单项目:使用 HttpURLConnection
  • 需要更多功能:使用 Apache HttpClient 或 OkHttp
  • Spring项目:使用 RestTemplate
  • Servlet项目:直接使用 HttpServletResponse

到此这篇关于java设置HTTP请求header的多种实现方式详解的文章就介绍到这了,更多相关java设置HTTP请求header内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中cache使用的实现示例

    SpringBoot中cache使用的实现示例

    本文主要介绍了SpringBoot中cache使用的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-10-10
  • 一篇文章彻底弄懂SpringBoot项目jdk版本及依赖不兼容问题

    一篇文章彻底弄懂SpringBoot项目jdk版本及依赖不兼容问题

    这篇文章主要给大家介绍了关于彻底弄懂SpringBoot项目jdk版本及依赖不兼容问题的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-01-01
  • 线程阻塞唤醒工具 LockSupport使用详解

    线程阻塞唤醒工具 LockSupport使用详解

    这篇文章主要为大家介绍了线程阻塞唤醒工具LockSupport使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • MyBatis 原生二级缓存"难以修复"的原因解析及解决方案

    MyBatis 原生二级缓存"难以修复"的原因解析及解决方案

    文章主要讨论了MyBatis原生二级缓存存在的问题,包括结构性缺陷、难以修复等,社区提供了多种增强插件方案,但这些方案也有各自的优缺点,本文结合实例代码介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • IDEA 2019.2.3破解激活教程(亲测有效)

    IDEA 2019.2.3破解激活教程(亲测有效)

    这篇文章主要介绍了IDEA 2019.2.3破解激活教程(亲测有效),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Maven中optional标签用法详解

    Maven中optional标签用法详解

    这篇文章主要介绍了Maven中optional标签,文章中有详细的代码示例供大家参考,对大家的学习或工作有一定的参考价值,感兴趣的小伙伴可以借鉴一下
    2023-05-05
  • spring通过filter,Interceptor统一处理ResponseBody的返回值操作

    spring通过filter,Interceptor统一处理ResponseBody的返回值操作

    这篇文章主要介绍了spring通过filter,Interceptor统一处理ResponseBody的返回值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot基于Redis实现token的在线续期的实践

    SpringBoot基于Redis实现token的在线续期的实践

    本文主要介绍了使用Redis实现JWT令牌在线续期的方案,通过在线续期token,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 如何解决UnsupportedOperationException异常问题

    如何解决UnsupportedOperationException异常问题

    这篇文章主要介绍了如何解决UnsupportedOperationException异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Linux中Java开发常用软件安装方法总结

    Linux中Java开发常用软件安装方法总结

    这篇文章主要介绍了Linux中Java开发常用软件安装方法总结,需要的朋友可以参考下
    2020-02-02

最新评论