34

我想向 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)

4

2 回答 2

38

在尝试获取标头之前,请确保您获得了成功的响应。您可以通过以下方式检查您的回复:

int status = conn.getResponseCode();

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

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

于 2013-08-13T06:31:38.127 回答
13

在连接之前(就在 setRquestPropert 之后,setDoOutput aso):

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 );
}
于 2017-06-29T09:29:39.977 回答