使用HttpURLConnection设置自定义标头

问题描述:

我只是使用 HttpURLConnection 向Rest API发出 GET 请求。

I am simply making a GET request to a Rest API using HttpURLConnection.

我需要添加一些自定义标题,但在尝试检索其值时,我得到 null

I need to add some custom headers but I am getting null while trying to retrieve their values.

代码:

URL url;
try {
    url = new URL("http://www.example.com/rest/");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    // Set Headers
    conn.setRequestProperty("CustomHeader", "someValue");
    conn.setRequestProperty("accept", "application/json");

    // Output is null here <--------
    System.out.println(conn.getHeaderField("CustomHeader"));

    // Request not successful
    if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
        throw new RuntimeException("Request Failed. HTTP Error Code: " + conn.getResponseCode());
    }

    // Read response
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    StringBuffer jsonString = new StringBuffer();
    String line;
    while ((line = br.readLine()) != null) {
        jsonString.append(line);
    }
    br.close();
    conn.disconnect();
} catch (IOException e) {
    e.printStackTrace();
}

我缺少什么?

conn.getHeaderField(CustomHeader)返回响应标头而不是请求一个。

The conn.getHeaderField("CustomHeader") returns the response header not the request one.

要返回请求标头,请使用: conn.getRequestProperty(CustomHeader)

To return the request header use: conn.getRequestProperty("CustomHeader")