gpt4 book ai didi

java - 手动向网站发送 GET 请求。 302重定向错误

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:49 28 4
gpt4 key购买 nike

我目前正在使用 java 开发网络抓取工具。我通过设置 tcp 连接和使用 printerwriter 手动发送 GET 请求。

我能够连接到大多数网站,例如 yahoo.com 或 cracked.com 并收到响应,但我无法连接到我的目标网站 - vinylengine.com。它总是会返回 302 错误。

我将我的发送请求与浏览器的发送请求进行了比较,它们几乎完全相同。

我的标题:

GET / HTTP/1.1
Host: www.vinylengine.com

我的回复:

HTTP/1.1 302 Found
Date: Thu, 06 Jun 2013 19:27:00 GMT
Server: Apache
Location: http://www.nakedresource.com/
Cache-Control: max-age=1209600
Expires: Thu, 20 Jun 2013 19:27:00 GMT
Content-Length: 213
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.nakedresource.com/">here</a>.</p>
</body></html>

浏览器的标题:

GET http://www.vinylengine.com/ HTTP/1.1
Host: www.vinylengine.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __utma=72407316.18415374.1370488314.1370497873.1370543389.3; __utmz=72407316.1370488314.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); SESSaf8d12283bdbdc5f5bbfb2aef054db6d=1f0676e5cab0ba2c5a80e76ea0bd6f75; __utmc=72407316; has_js=1; __utmb=72407316
Connection: keep-alive
If-Modified-Since: Thu, 06 Jun 2013 18:02:53 GMT
If-None-Match: "2186d59ac297e0f1a43433fa61e8a94b"

代码:

public void sendRequest(String extensionString, String urlString)
{
try
{
//BufferedReader inFromServer;
//PrintWriter outToServer;
//These 2 are initalized elsewhere

outToServer.println("GET " + extensionString + " HTTP/1.1");
outToServer.println("Host: " + urlString);

outToServer.println("");
outToServer.flush();

String temp;
while((temp=inFromServer.readLine()) != null)
{
System.out.println(temp);
}

return;
}
catch (Exception e)
{
System.out.printf("sendRequest failed: %s",e);
return;
}
}

我曾尝试将主机名更改为 nakedresource.com,但是当我这样做时,我得到的是 nakedresource.com 而不是 vinylengine.com 的页面源

最佳答案

有问题的站点正在查看您的用户代理字符串(或者在您的情况下缺少用户代理字符串)。

当您说您正在做与浏览器“几乎相同的事情”时……您是对的。计算机对这类事情有点挑剔。

如果您不提供 User-Agent: header ,您将获得重定向。

> telnet www.vinylengine.com 80
Trying 67.225.154.112...
Connected to vinylengine.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.vinylengine.com
Accept: */*

HTTP/1.1 302 Found
...

而如果您确实提供了一个,您将获得页面:

> telnet www.vinylengine.com 80
Trying 67.225.154.112...
Connected to vinylengine.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.vinylengine.com
User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
Accept: */*

HTTP/1.1 200 OK
... (the page)

这通常是因为站点根据 User-Agent header 向不同的浏览器提供不同版本的内容。显然,他们对“无用户代理”的回答是……平底船,您将被重定向到父站点根目录。

关于java - 手动向网站发送 GET 请求。 302重定向错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16970608/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com