通过 java 发送的请求几乎没有 HTTP headers
Few HTTP headers missing for the request sent via java
我在 Java 中编写了一个简单的程序,它将 HTTP GET
请求发送到 URL,读取响应,并显示来自该响应的 headers控制台。这是我的代码:
URL url= new URL(textBox.getText());
socket = new Socket(url.getAuthority(), DEFAULT_PORT);
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.println("GET " + url.getFile() + " HTTP/1.1");
writer.println("Host: " + url.getAuthority());
writer.println("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0");
writer.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
writer.println("");
writer.flush();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
if (line.isEmpty()) break;
response.append(line + "\n");
}
Web 服务器设置了多个 cookie,但我的代码只显示前几个 Set-cookie
headers。
我做错了什么?
为了加载网页,浏览器将发送一系列 HTTP 请求。您可能仅通过 java 代码发送第一个请求。如果通过某些 Web 浏览器发送相同的请求,它将呈现加载的页面并触发进一步的 HTTP 请求。这些后续请求可能会设置剩余的 cookie。
我建议您比较两个响应(通过 Java 代码和浏览器发送),您可以使用 fiddler。
我在 Java 中编写了一个简单的程序,它将 HTTP GET
请求发送到 URL,读取响应,并显示来自该响应的 headers控制台。这是我的代码:
URL url= new URL(textBox.getText());
socket = new Socket(url.getAuthority(), DEFAULT_PORT);
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.println("GET " + url.getFile() + " HTTP/1.1");
writer.println("Host: " + url.getAuthority());
writer.println("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0");
writer.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
writer.println("");
writer.flush();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
if (line.isEmpty()) break;
response.append(line + "\n");
}
Web 服务器设置了多个 cookie,但我的代码只显示前几个 Set-cookie
headers。
我做错了什么?
为了加载网页,浏览器将发送一系列 HTTP 请求。您可能仅通过 java 代码发送第一个请求。如果通过某些 Web 浏览器发送相同的请求,它将呈现加载的页面并触发进一步的 HTTP 请求。这些后续请求可能会设置剩余的 cookie。
我建议您比较两个响应(通过 Java 代码和浏览器发送),您可以使用 fiddler。