Apache HttpComponents:org.apache.http.client.ClientProtocolException

2023-11-30

所以我在java中使用apache HttpComponents来处理http请求。 现在我想重用DefaultHttpClient,根据这个例子应该有什么可能:http://wiki.apache.org/HttpComponents/QuickStart。该示例本身给出了 ssl 错误,因此我对其进行了一些修改和简化。现在我总是得到一个org.apache.http.client.ClientProtocolException

这是我的示例程序,基本上我只是使用相同的请求 2 个网页DefaultHttpClient.

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;


public class ClientFormLogin {

    public static void main(String[] args) throws Exception {

        DefaultHttpClient httpclient = new DefaultHttpClient();

        //Handle first request.
        HttpGet httpget = new HttpGet("http://tweakers.net/nieuws/82969/amazon-nederland-opent-digitale-deuren-in-september.html");
        HttpResponse response = httpclient.execute(httpget);
        System.out.println("Execute finished");
        HttpEntity entity = response.getEntity();
        String page = readInput(entity.getContent());
        System.out.println("Request one finished without problems!");

        //Handle second request
        HttpGet httpost = new HttpGet("http://gathering.tweakers.net/forum/list_messages/1506977/last");
        response = httpclient.execute(httpost);
        entity = response.getEntity();
        page = readInput(entity.getContent());
        System.out.println("Request two finished without problems!");
    }

    private static String readInput(InputStream in) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte bytes[] = new byte[1024];

        int n = in.read(bytes);

        while (n != -1) {
            out.write(bytes, 0, n);
            n = in.read(bytes);
        }

        return new String(out.toString());
    }
}

运行我的示例时出现以下错误

Request one finished without problems!
Exception in thread "main" org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
    at ClientFormLogin.main(ClientFormLogin.java:29)
Caused by: org.apache.http.HttpException: Unable to establish route: planned = {}->http://gathering.tweakers.net; current = {}->http://tweakers.net
    at org.apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.java:842)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    ... 3 more

任何人都可以给我一些指导,告诉我如何解决这个问题,除了使用新的DefaultHttpClient对于每个请求。


Edit

我刚刚发现如果我留在同一个域上我没有问题,所以:

page1: 'http://tweakers.net/nieuws/82969/amazon-nederland-opent-digitale-deuren-in-september.html'
page2: 'http://tweakers.net/nieuws/82973/website-nujij-belandt-op-zwarte-lijst-google-door-malware.html'

如果我必须这样做,我没有问题:

page1: 'http://tweakers.net/nieuws/82969/amazon-nederland-opent-digitale-deuren-in-september.html'
page2: 'http://gathering.tweakers.net/forum/list_messages/1506076/last'

我得到了错误。

Ofc 我在发布问题后一分钟就看到了这个。除非有人能告诉我如何使用相同的两个独立域DefaultHttpClient我的问题已经得到解答。


这可能是由于 v4.2 BasicClientConnectionManager 中最近出现的错误影响了跨站点重定向。看http://issues.apache.org/jira/browse/HTTPCLIENT-1193.

根据维护者的说法,一种临时解决方法是使用 SingleClientConnManager 或 PoolingClientConnectionManager。也许是这样的:

ClientConnectionManager connManager = new PoolingClientConnectionManager();
DefaultHttpClient httpclient = new DefaultHttpClient(connManager);
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache HttpComponents:org.apache.http.client.ClientProtocolException 的相关文章

随机推荐

  • AVD 管理器无法找到 tools\android.bat,即使它在那里

    我在互联网上对此进行了很多研究 但我发现没有任何东西可以帮助我 我让 SDK 管理器运行 但是当我尝试运行 Adroid AVD 管理器时 它不运行 为什么 它一字一句地说 无法执行tools android bat 该系统找不到指定的文件
  • 如何更改javafx中滑块的填充颜色

    我正在制作一个视频播放器 想要使用时间线滑块 并且我想将滑块从第一张图片更改为第二张图片 我可以只使用CSS代码来做到这一点吗 如果是的话 代码是什么 下面很长的帖子 如果您想要一种简单的方法来实现滑块上的 颜色 我应该提到您可以使用JFo
  • 如何绕过权限被拒绝错误?

    以下示例将点形状文件写入光盘 但是 当脚本尝试将 shapefile 写入 C 时 我收到错误 我可以写入外部硬盘 G 以下是我在 R 中收到的错误 文件错误 out name wb 无法打开连接 另外 警告消息 在文件 out name
  • 有条件地选择多个(相邻)行

    我想返回符合特定条件的行 我可以对单行执行此操作 但我需要对多行组合执行此操作 例如 浅绿色 符合 XYZ 为正且 总计 gt 10 的条件 而 红色 则不然 当我组合相邻的一行或多行时 它确实 gt 深绿色 我可以实现遍历所有行而不返回重
  • 为什么当 Tomcat 加载和读取 beans.xml 时 Spring AOP XML 模式没有正确加载

    我正在尝试使用Spring 基于模式的 AOP 支持在 Eclipse 中 尝试在 Tomcat 中加载配置时出现错误 Eclipse 中没有错误 并且 aop 命名空间的自动完成功能正常工作 但是当我尝试将项目加载到 Eclipse 中时
  • 如何通过互联网连接TFS

    我正在团队环境中开发一个大型应用程序 我们使用 Team Foundation Server 来通过 VS2010 控制源代码 我们使用 LAN 连接 TFS 这在小型办公室中效果很好 但现在我们需要通过 Internet 连接 TFS 实
  • 如何重写 ParsePushBroadcastReceiver 的 onPushReceive() ?

    我正在使用 Parse com 的推送通知服务 根据doc 覆盖 onPushReceive 以触发 静默 后台操作 推动 我找到了onPushOpen 的源代码here 但现在我必须重写 onPushReceive 来自定义声音和振动的行
  • Spark 中 addJar() 方法有什么用?

    在Spark作业中 我不知道如何导入和使用方法共享的jarSparkContext addJar 似乎这种方法能够将 jar 移动到集群中其他节点可以访问的某个位置 但我不知道如何导入它们 这是一个例子 package utils publ
  • 如何使用 Beautiful Soup 查找具有特定文本的标签?

    怎么找text I am looking for在以下 HTML 中 标有换行符 n tr td class pos n Some text n br n strong some value strong n td tr tr td cla
  • Scala:在编译时验证类参数不是instanceOf特征

    在编译时 我想验证类参数不是特定特征 T 的实例 我知道如何在运行时使用require or a case match但想知道如何在编译时完成此操作以防止用户提供某种类型的对象混合 我研究过 scala 宏 反射 但无法完全理解它 trai
  • 用户切换浏览器选项卡时的事件

    我正在寻找一个每当用户从页面切换到另一个选项卡时就会触发的事件 以及当用户再次切换回该选项卡时触发的另一个事件 window onblur and window onfocus 似乎无法正常工作跨所有浏览器 我可以查看代理来合成此事件吗 您
  • 一些字符在 POST 期间编码,而另一些则没有

    TL DR 代码点火器 Security类直接操作您的全局变量 例如 POST它发现file and file 是一种威胁 因此它对其进行 HTML 编码 config php from my apps folder is the culp
  • 从对象中原生提取属性

    I use underscore js从对象中提取属性的库 是否有更原生的 JS 方法来完成相同的任务 var fullObject name Jack age 39 device tablet team Red const name de
  • 将 JPG 图像添加到 folium 弹出窗口

    我尝试将图像添加到 folium 弹出窗口 但失败了 我使用python 2 7版本和folium 0 50版本 实际上 我遵循了其他线程中提到的页面 但它仍然不起作用 http nbviewer jupyter org gist ocef
  • 许多:“require”:升级 ruby​​/rails 后无法加载此类文件 - “gem_name”(LoadError)

    在我将 Rails 从 4 1 升级并将 ruby 从 2 0 升级到 2 1 后 当我尝试启动 Rails 时 遇到了一些负载问题 我的许多宝石都抛出这样的错误 Users nk rvm gems ruby 2 1 3 au rails4
  • 获取导入模块的文件路径

    我正在为我的控制器编写一个类装饰器 看起来像 export function Controller
  • 如何使用 Jackson AnnotationIntrospector 有条件地忽略属性

    我想创建一个注释以使 Jackson 忽略带注释的字段 除非设置了特定的跟踪级别 public class A IgnoreLevel Debug String str1 IgnoreLevel Info String str2 或者 如果
  • 如何替换字符串中所有出现的字符?

    将所有出现的字符替换为另一个字符的有效方法是什么std string std string不包含此类功能 但您可以单独使用replace函数来自algorithm header include
  • 在散景中在线性和对数刻度之间切换

    我怎样才能重新生成这个例子在线性和对数刻度之间切换 背景 我是 Matplotlib 的长期用户 最近是 Bokeh 用户 我开始使用 Bokeh 的主要原因之一是它提供的交互性 其中很大一部分是能够在图中的线性和对数刻度之间切换 这是我日
  • Apache HttpComponents:org.apache.http.client.ClientProtocolException

    所以我在java中使用apache HttpComponents来处理http请求 现在我想重用DefaultHttpClient 根据这个例子应该有什么可能 http wiki apache org HttpComponents Quic