当前位置: 首页 > 知识库问答 >
问题:

获取“java.net.ProtocolException:服务器重定向太多次”错误

步建茗
2023-03-14

我用下面的代码发出一个简单的URL请求:

URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();

但在最后一行,我得到了“重定向太多次错误”。如果我的“网页”变量是谷歌。com,然后它工作正常,但当我尝试使用servlet的URL时,它失败了。似乎我可以通过以下方法调整它遵循重定向的次数(默认值为20):

System.setProperty("http.maxRedirects", "100");

但是当我把它调到,比如说,100时,肯定需要更长的时间来抛出错误,所以我知道它在努力。然而,我的servlet的网址在(任何)浏览器中都能正常工作,在Firebug中使用“持久”选项,它似乎只重定向一次。

关于我的servlet的更多信息。。。它在tomcat中运行,由apache使用“mod proxy ajp”进行前置。另外值得注意的是,它使用的是表单身份验证,因此您输入的任何URL都应该将您重定向到登录页面。正如我所说,这在所有浏览器中都能正常工作,但由于某些原因,重定向在Java 6中不能与URLConnection一起工作。

感谢阅读。。。思想?

共有3个答案

单于钊
2023-03-14

我在unix环境下使用Tomcat6上的Jenkins时发现了这个错误。出于某种原因,升级到Java7解决了这个问题。我很想知道为什么会这样。

桂智志
2023-03-14

杜斯,我加了几行:

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);

看这个例子:

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);
String buf="";
dk = new DAKABrowser(input.getText());
try {
    URL url = new URL(dk.toURL(input.getText()));
    DataInputStream dis = new DataInputStream(url.openStream());
    String inputLine;
    while ((inputLine = dis.readLine()) != null) {
        buf+=inputLine;
        output.append(inputLine+"\n");
    }
    dis.close();
} 
catch (MalformedURLException me) {
    System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
    System.out.println("IOException: " + ioe);
}
titulo.setText(dk.getTitle(buf));
谢豪
2023-03-14

它显然是在无限循环中重定向,因为您不维护用户会话。会话通常由cookie支持。在使用URLConnection之前,需要创建一个CookieManager

// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...
  • 使用java.net.URLConnection来触发和处理HTTP请求
 类似资料:
  • 问题内容: 我使用以下代码发出了一个简单的URL请求: 但是在最后一行,我收到“重定向次数过多错误”。如果说我的“网页”变量是google.com,那么它可以正常工作,但是当我尝试使用我的servlet的URL时,它将失败。看来我可以用以下方法调整重定向之后的次数(默认为20): 但是当我将其提高到100时,抛出错误肯定需要更长的时间,所以我知道它正在尝试。但是,指向我的servlet的URL在(

  • 我使用Laravel 5.4的项目和场景是,如果没有任何创建然后在登录重定向到页面。 下面是我的路线页编码 目录结构是 下面是我的code 它重定向了太多次,我收到错误消息说。 我在这里做错了什么??

  • 问题内容: 您好,我收到了我的应用程序出现以下错误的问题: 现在我不知道为什么它这么慢,并得到错误,该网站唯一要做的就是打开php文档并启动bash命令。:(所以它应该只重定向1次 谢谢 :) 我将使用应用程序中的按钮打开灯: 编辑: 现在我正在使用: 但是出现以下错误: 问题答案: 您的Android代码完美无缺- 这是服务器无法发挥作用的原因。首先,检查您正在调用正确的URL并传递正确的参数。

  • 当使用Keycloak-js(版本:4.0.0)在Angular4中创建会话时,SSO不起作用 null 响应URL: http://localhost:3000/login/generic_oauth#state=wwxu1iywxtsevsxwcfzwhpz7opm63dbu5aombtmdjhe%3d&session_state=6ec8255b-ed4c-4399-951c-0241ce7

  • 我正在使用Thymeleaf开发一个简单的登录表单 我试图通过将以下属性放入我的应用程序来禁用默认的安全登录屏幕。属性: 并将以下配置添加到我的SecurityConfig中,以便除"/登录"和"/资源"之外的任何URL都将获得身份验证: 我的LoginController是明确的: 有人知道为什么会这样吗?

  • 当使用自定义重定向URL配置Spring security时,该URL使用基本URI模板变量,如下所示:https://docs.Spring.io/Spring-security/site/docs/5.2.12.release/reference/html/oauth2.html#oauth2client-auth-code-redirect-uri 应用程序进入了太多重定向的循环。 此配置工