panghaoyu 发表于 2014-03-17 16:45

求教:httpclien中的RedirectException: Maximum redirects (50) exceeded

我遇到了下面的异常RedirectException: Maximum redirects (50) exceeded using HttpClient 4.3 on solaris10.

org.apache.http.client.ClientProtocolException
      at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:188)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:214)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:160)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:136)
      at bing.comSpider.doGetFrombing.com(bing.comSpider.java:141)
      at bing.comSpider.executeThread(bing.comSpider.java:315)
      at Calculator.compute(Calculator.java:24)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:377)
      at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:654)
      at java.util.concurrent.ForkJoinTask.invokeAll(ForkJoinTask.java:685)
      at Calculator.compute(Calculator.java:31)
      at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:177)
      at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:334)
      at java.util.concurrent.ForkJoinWorkerThread.execTask(ForkJoinWorkerThread.java:604)
      at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:762)
      at java.util.concurrent.ForkJoinPool.work(ForkJoinPool.java:646)
      at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:398)
Caused by: org.apache.http.client.RedirectException: Maximum redirects (50) exceeded
      at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:115)
      at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
      ... 58 more
      
下面是我的代码
                        RequestConfig configIdentified = RequestConfig.custom()
                                        .setSocketTimeout(12000).setConnectTimeout(12000)
                                        .setConnectionRequestTimeout(12000)
                                        .setStaleConnectionCheckEnabled(true)
                                        .setCircularRedirectsAllowed(true).build();
                       
136                        HttpGet httpget1 = new HttpGet("www.aaa.bbb.com/abc/cde");
137                        HttpGet httpget2 = new HttpGet(this.getDetailPathUrl(pagenum));
138                        try
139                        {
140                                httpget1.setConfig(configIdentified);
141                                httpclient.execute(httpget1, responseHandler);

我想知道如何避免 RedirectException: Maximum redirects (50) exceeded

先谢谢大家。

bikong0411 发表于 2014-03-18 08:59

限制重定向次数

panghaoyu 发表于 2014-03-18 09:22

本帖最后由 panghaoyu 于 2014-03-18 09:22 编辑

非常感谢 bikong0411 的指点。

我的服务器连接网络,每次都要经过一个计费网管,所以setCircularRedirectsAllowed必须保留

当然会发生多次重定向,

很奇怪的是,程序在winxp上开发运行没有问题,移植到solars10 上后就报错了

请各位多指点

rover12421 发表于 2014-03-25 09:38

其实你可以手动处理下重定向,把重定向的URI打印出来,一般的重定向都不会超过10的,否则就可能进入了死循环
页: [1]
查看完整版本: 求教:httpclien中的RedirectException: Maximum redirects (50) exceeded