java - Jsoup:尝试访问页面时出现错误 307

标签 java http jsoup

我正在尝试访问页面 http://www.betbrain.com使用 jsoup,但这会给我错误 307。任何人都知道我该如何解决这个问题?

String sURL = "http://www.betbrain.com";
Connection.Response res = Jsoup.connect(sURL).timeout(5000).ignoreHttpErrors(true).followRedirects(true).execute();

最佳答案

HTTP 状态代码 307 不是错误,它是一条信息,表明服务器正在临时重定向到另一个页面。

参见 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html有关 HTTP 状态代码的信息。

从您的请求 返回的response 包含 header 内重定向的值。

要获取 header 值,您可以这样做:

String[] headerValues = res.headers().values().toArray(new String[res.headers().values().size()]);
String[] headerKeys = res.headers().keySet().toArray(new String[res.headers().keySet().size()]);

for (int i = 0; i < headerValues.length; i++) {
    System.out.println("Key: " + headerKeys[i] + " - value: " + headerValues[i]);
}

您当然需要自己的代码,因为您需要您的响应

现在,当您查看写入控制台的 header 时,您会看到一个 key :

Locationvaluehttp://www.betbrain.com/?attempt=1

这是您要重定向到的 URL,因此您可以执行以下操作:

String newRedirectedUrl = res.headers("location");
Connection.Response newResponse = Jsoup.connect(newRedirectUrl).execute();
// Parse the response accordingly.

我不确定为什么 jsoup 没有正确遵循这个重定向,但它似乎与 HTTP 重定向的标准 Java 实现有关。

关于java - Jsoup:尝试访问页面时出现错误 307,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412113/

相关文章:

java - 在小米设备的锁定屏幕上显示通知

c - 从 libevent 中的 HTTP 服务器响应中获取所有 HTTP header

perl - LWP::UserAgent 坚持验证主机名

node.js - Lambda/nodejs http 在没有设置 VPC 的情况下超时

java - 套接字超时异常 : Read timed out

java - Jsoup Element.attr() 返回意外值 (Android)

java - 重复的数组元素和唯一的元素

java - 删除 Android 应用程序上的 'menu'

java - JavaFX 中什么可以代替操作?

使用 Jsoup 需要登录的 Java 抓取网站