该
getHeaderField()方法对我不起作用
您是在的情况下问这个的
java.net.URLConnection吗?不可以,无法使用原始HTTP响应标头
URLconnection。您需要退回到低级的Socket编程。这是一个SSCCE,只需复制“
粘贴 ”即可运行它。
package com.stackoverflow.q2307291;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class Test { public static void main(String[] args) throws IOException { String hostname = "stackoverflow.com"; int port = 80; Socket socket = null; PrintWriter writer = null; BufferedReader reader = null; try { socket = new Socket(hostname, port); writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); writer.println("GET / HTTP/1.1"); writer.println("Host: " + hostname); writer.println("Accept: */*"); writer.println("User-Agent: Java"); // Be honest. writer.println(""); // important, else the server will expect that there's more into the request. writer.flush(); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); for (String line; (line = reader.readLine()) != null;) { if (line.isEmpty()) break; // Stop when headers are completed. We're not interested in all the HTML. System.out.println(line); } } finally { if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} if (writer != null) { writer.close(); } if (socket != null) try { socket.close(); } catch (IOException logOrIgnore) {} } }}为了避免每个尝试此代码片段的人都使SO过载,输出如下所示:
HTTP / 1.1 200 OK缓存控制:私有内容类型:text / html; 字符集= utf-8过期:2010年2月21日,星期日,格林尼治标准时间伺服器:Microsoft-IIS / 7.5日期:2010年2月21日,星期日,格林尼治标准时间连接方式:关闭内容长度:208969
要了解有关以低级方式发送HTTP请求的更多信息,请阅读HTTP规范。
但是,您可能想使用
getHeaderFields()method来检索具有多个值的标头。该
getHeaderField()即只返回最后一个值,按照链接的API文档。
List<String> cookies = connection.getHeaderFields().get("Set-cookie");


