Java 获取返回的响应头

在进行网络请求时,我们通常需要获取服务端返回的响应头信息。Java 提供了多种方式来获取响应头,本文将为您介绍其中常用的几种方法。

HttpURLConnection

Java 的标准库中提供了 java.net.HttpURLConnection 类来进行网络请求。下面是一个示例代码,展示了如何使用 HttpURLConnection 发起 GET 请求并获取响应头信息:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

public class HttpURLConnectionExample {
    public static void main(String[] args) throws Exception {
        String url = "
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        
        con.setRequestMethod("GET");
        
        int responseCode = con.getResponseCode();
        System.out.println("Response Code: " + responseCode);
        
        Map<String,java.util.List<String>> headers = con.getHeaderFields();
        
        System.out.println("Response Headers:");
        for (Map.Entry<String, java.util.List<String>> entry : headers.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
        
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder content = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            content.append(inputLine);
        }
        in.close();
        
        System.out.println("Response Body: " + content.toString());
    }
}

在上述代码中,我们首先创建了一个 URL 对象来表示请求的地址。然后通过 openConnection 方法打开一个连接,返回的是 HttpURLConnection 对象。通过调用 setRequestMethod 方法设置请求方法为 GET。使用 getResponseCode 方法可以获取响应的状态码,而 getHeaderFields 方法可以获取所有的响应头信息,返回的是一个 Map 对象。我们可以遍历这个 Map 对象,分别获取每个响应头的键和值。最后,我们还可以获取响应体的内容。

Apache HttpClient

Apache HttpClient 是一个功能强大的 HTTP 客户端库,提供了更多的灵活性和扩展性。下面是一个使用 Apache HttpClient 发起 GET 请求并获取响应头的示例代码:

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class ApacheHttpClientExample {
    public static void main(String[] args) throws Exception {
        String url = "
        
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet(url);
        
        HttpResponse response = client.execute(request);
        System.out.println("Response Code: " + response.getStatusLine().getStatusCode());
        
        System.out.println("Response Headers:");
        for (org.apache.http.Header header : response.getAllHeaders()) {
            System.out.println(header.getName() + ": " + header.getValue());
        }
        
        String responseBody = EntityUtils.toString(response.getEntity());
        System.out.println("Response Body: " + responseBody);
    }
}

在上述代码中,我们首先创建了一个 HttpClient 对象,其通过 HttpClientBuilder 类的 create 方法创建。然后,我们创建一个 HttpGet 对象,表示一个 GET 请求。通过调用 execute 方法,我们可以发送请求并获取响应。response.getStatusLine().getStatusCode() 可以获取响应的状态码,而 response.getAllHeaders() 可以获取所有的响应头信息。最后,通过 EntityUtils.toString(response.getEntity()) 可以获取响应体的内容。

总结

通过使用 HttpURLConnection 或 Apache HttpClient,我们可以方便地获取返回的响应头信息。这些方法可以应用于各种不同的网络请求场景,帮助我们更好地与服务端进行通信。

希望本文对您有所帮助!如果您有任何疑问或建议,请随时提出。Happy coding!

"代码示例来源:[How to send HTTP request GET/POST in Java](