从HttpUrlConnection对象获取头信息

40

我希望发送请求到Servlet并从响应中读取头信息。于是我尝试使用以下代码:

  URL url = new URL(contextPath + "file_operations");
    HttpURLConnection conn = null;
    try {
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("charset", "utf-8");
        conn.setUseCaches(false);
        conn.setConnectTimeout(1000 * 5);
        conn.connect();

        conn.getHeaderField("MyHeader")
        .....

但是接收到的头信息始终为 null。Servlet 可以正常工作(我已尝试使用独立的 HTTP 客户端与 Servlet 进行交互)


它是否连接或出现任何异常? - Deepu--Java
2个回答

42

确保在尝试获取标头之前,您已经获得了成功的响应。以下是您可以检查响应的方式:

int status = conn.getResponseCode();

if (status == HttpURLConnection.HTTP_OK) {
    String header = conn.getHeaderField("MyHeader");
}

还要确保Servlet响应不是重定向响应,如果重定向,所有的会话信息,包括头信息都将丢失。


16

连接之前(在setRquestPropert、setDoOutput等之后):

for (Map.Entry<String, List<String>> entries : conn.getRequestProperties().entrySet()) {    
    String values = "";
    for (String value : entries.getValue()) {
        values += value + ",";
    }
    Log.d("Request", entries.getKey() + " - " +  values );
}

读取响应后,在断开连接之前:

for (Map.Entry<String, List<String>> entries : conn.getHeaderFields().entrySet()) {
    String values = "";
    for (String value : entries.getValue()) {
        values += value + ",";
    }
    Log.d("Response", entries.getKey() + " - " +  values );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接