测试

我来帮您编写一个Java方法来发送带有Bearer Token认证的POST请求。

首先,让我搜索一些相关的最佳实践和示例:根据您的需求,我为您提供一个使用Java 11内置的HttpClient发送带有Bearer Token认证的POST请求的方法。以下是完整的代码示例:

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/**
 * HTTP请求工具类,用于发送带有Bearer Token认证的POST请求
 */
public class HttpBearerTokenUtil {
    
    private static final HttpClient httpClient = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
    
    /**
     * 发送带有Bearer Token认证的POST请求
     * 
     * @param url 请求的URL地址
     * @param token Bearer认证的token
     * @param requestBody JSON格式的请求体
     * @return 响应结果
     * @throws IOException
     * @throws InterruptedException
     */
    public static String sendPostWithBearerToken(String url, String token, String requestBody) 
            throws IOException, InterruptedException {
        
        // 构建HTTP请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Authorization", "Bearer " + token)  // 设置Bearer Token认证头
                .header("Content-Type", "application/json")   // 设置请求体为JSON格式
                .header("Accept", "application/json")         // 设置接受响应为JSON格式
                .POST(HttpRequest.BodyPublishers.ofString(requestBody)) // 设置请求体
                .timeout(Duration.ofSeconds(30))              // 设置请求超时时间
                .build();
        
        // 发送请求并获取响应
        HttpResponse<String> response = httpClient.send(request, 
                HttpResponse.BodyHandlers.ofString());
        
        // 返回响应体
        return response.body();
    }
    
    /**
     * 发送带有Bearer Token认证的POST请求(带状态码返回)
     * 
     * @param url 请求的URL地址
     * @param token Bearer认证的token
     * @param requestBody JSON格式的请求体
     * @return 包含响应状态和内容的HttpResponse对象
     * @throws IOException
     * @throws InterruptedException
     */
    public static HttpResponse<String> sendPostWithBearerTokenDetailed(String url, String token, String requestBody) 
            throws IOException, InterruptedException {
        
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Authorization", "Bearer " + token)
                .header("Content-Type", "application/json")
                .header("Accept", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .timeout(Duration.ofSeconds(30))
                .build();
        
        return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    }
    
    // 使用示例
    public static void main(String[] args) {
        try {
            String url = "https://api.example.com/data";
            String token = "your_bearer_token_here";
            String jsonData = "{\n" +
                    "  \"name\": \"John Doe\",\n" +
                    "  \"email\": \"john.doe@example.com\",\n" +
                    "  \"age\": 30\n" +
                    "}";
            
            // 发送请求
            String response = sendPostWithBearerToken(url, token, jsonData);
            System.out.println("Response: " + response);
            
            // 或者获取详细响应信息
            HttpResponse<String> detailedResponse = sendPostWithBearerTokenDetailed(url, token, jsonData);
            System.out.println("Status Code: " + detailedResponse.statusCode());
            System.out.println("Headers: " + detailedResponse.headers().map());
            System.out.println("Body: " + detailedResponse.body());
            
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

如果您需要使用Apache HttpClient库,这里也提供一个对应的版本:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.util.EntityUtils;

import java.io.IOException;

/**
 * 使用Apache HttpClient发送带有Bearer Token认证的POST请求
 */
public class ApacheHttpBearerTokenUtil {
    
    /**
     * 发送带有Bearer Token认证的POST请求
     * 
     * @param url 请求的URL地址
     * @param token Bearer认证的token
     * @param requestBody JSON格式的请求体
     * @return 响应结果
     * @throws IOException
     */
    public static String sendPostWithBearerToken(String url, String token, String requestBody) 
            throws IOException {
        
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            
            // 设置请求头
            httpPost.setHeader("Authorization", "Bearer " + token);
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setHeader("Accept", "application/json");
            
            // 设置请求体
            StringEntity entity = new StringEntity(requestBody, "UTF-8");
            entity.setContentType("application/json");
            httpPost.setEntity(entity);
            
            // 执行请求
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity responseEntity = response.getEntity();
            
            // 返回响应内容
            return EntityUtils.toString(responseEntity, "UTF-8");
        }
    }
    
    // 使用示例
    public static void main(String[] args) {
        try {
            String url = "https://api.example.com/data";
            String token = "your_bearer_token_here";
            String jsonData = "{\n" +
                    "  \"name\": \"John Doe\",\n" +
                    "  \"email\": \"john.doe@example.com\",\n" +
                    "  \"age\": 30\n" +
                    "}";
            
            String response = sendPostWithBearerToken(url, token, jsonData);
            System.out.println("Response: " + response);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Maven依赖(如果使用Apache HttpClient):

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

主要特点:

  1. Bearer Token认证:在请求头中添加Authorization: Bearer <token>
  2. JSON格式:设置Content-Type: application/json
  3. 异常处理:包含了适当的异常处理
  4. 超时设置:设置了连接和请求超时时间
  5. 灵活性:提供了基础版本和详细响应版本

您可以根据实际需要选择使用Java 11内置的HttpClient或者Apache HttpClient。Java 11的HttpClient是内置的,不需要额外依赖,而Apache HttpClient功能更丰富但需要添加依赖。

 

 

 

好的,下面是一个使用 Java 编写的示例方法,这个方法会发起一个 HTTP 请求,并在请求头中添加 Bearer Token。请求的数据是 JSON 格式,并且请求头的 Content-Type 设置为 application/json

我们可以使用 HttpURLConnection 或者第三方库,如 HttpClient(在 Java 11 及以上版本中提供)来进行请求。这里,我会用 HttpClient 示例进行说明。

示例代码:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.util.Map;
import java.util.HashMap;
import java.io.IOException;

public class ApiRequestExample {

    public static String sendPostRequest(String token, String requestUrl, String jsonBody) throws IOException, InterruptedException {
        // 创建 HttpClient
        HttpClient client = HttpClient.newHttpClient();

        // 设置请求体
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(requestUrl))  // 请求的 URL
                .header("Authorization", "Bearer " + token)  // 设置 Bearer Token
                .header("Content-Type", "application/json")  // 设置请求体的格式
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))  // 设置请求体的 JSON 数据
                .build();

        // 发送请求并获取响应
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // 返回响应内容
        return response.body();
    }

    public static void main(String[] args) {
        try {
            // 示例 token 和请求数据
            String token = "your_token_here";  // 这里传入你实际的 Bearer Token
            String requestUrl = "https://api.example.com/endpoint";  // 替换为你实际的请求 URL
            String jsonBody = "{\"key1\":\"value1\", \"key2\":\"value2\"}";  // 请求体数据,替换为你实际的 JSON 数据

            // 发送请求并获取响应
            String response = sendPostRequest(token, requestUrl, jsonBody);
            System.out.println("Response: " + response);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

代码说明:

  1. HttpClient:这是 Java 11 引入的一个新特性,用来发送 HTTP 请求。

  2. Authorization Header:我们通过 Authorization 请求头来传递 Bearer Token,格式为 Bearer <token>

  3. Content-Type Header:设置为 application/json,表示请求体是 JSON 格式。

  4. POST 请求:我们使用 POST 方法发送请求,BodyPublishers.ofString(jsonBody) 是将 JSON 字符串作为请求体发送。

使用:

  • 你只需要提供 token(Bearer Token),requestUrl(请求的 URL)和 jsonBody(请求的 JSON 数据)。

  • 方法 sendPostRequest 会返回服务器的响应内容。

依赖:

  • HttpClient 是 Java 11 之后引入的,不需要额外的依赖。如果你使用的是较早的 Java 版本,你可以选择使用 HttpURLConnection 或者使用外部库,如 OkHttpApache HttpClient

你可以根据实际的需求修改 URL 或请求数据。如果你有其他问题或需要进一步修改,随时告诉我!

posted @ 2026-04-22 22:37  哩个啷个波  阅读(14)  评论(0)    收藏  举报