首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取"java.net.ProtocolException:服务器重定向的次数太多“错误

获取"java.net.ProtocolException:服务器重定向的次数太多“错误
EN

Stack Overflow用户
提问于 2012-06-14 04:38:30
回答 4查看 78.4K关注 0票数 36

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

代码语言:javascript
复制
URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();

但是在最后一行,我得到了“重定向太多次错误”。如果我的"webpage“变量是google.com,那么它工作得很好,但是当我尝试使用servlet的URL时,它就失败了。似乎我可以调整它跟随重定向的次数(默认为20次):

代码语言:javascript
复制
System.setProperty("http.maxRedirects", "100");

但是当我把它调到100时,抛出错误肯定需要更长的时间,所以我知道它正在尝试。然而,我的servlet的URL在(任何)浏览器中都工作得很好,并且在firebug中使用"persist“选项,它似乎只重定向一次。

关于我的servlet的更多信息...它在tomcat中运行,apache使用'mod-proxy-ajp‘作为前端。还要注意的是,它使用的是表单身份验证,因此您输入的任何URL都应将您重定向到登录页面。正如我所说的,这在所有浏览器中都能正常工作,但由于某些原因,重定向不能与Java6中的URLConnection一起工作。

感谢你的阅读...想法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-14 23:56:47

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

代码语言:javascript
复制
// 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();
// ...

另请参阅:

票数 50
EN

Stack Overflow用户

发布于 2013-02-21 06:29:58

Duse,我添加了下面这几行:

代码语言:javascript
复制
java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);

请参阅此示例:

代码语言:javascript
复制
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));
票数 5
EN

Stack Overflow用户

发布于 2014-02-21 02:18:02

我在unix环境中使用Tomcat6上的Jenkins时遇到了这个错误。出于某种原因,升级到Java7解决了这个问题。我很有兴趣知道这到底是为什么要修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11022934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档