首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache HttpComponents: HttpComponents

Apache HttpComponents: HttpComponents
EN

Stack Overflow用户
提问于 2012-07-05 15:30:15
回答 1查看 17.7K关注 0票数 2

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

下面是我的示例程序,简单地说,我只是使用相同的DefaultHttpClient请求两个网页。

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

当运行我的示例时,我得到了折叠错误

代码语言:javascript
复制
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之外,任何人都可以给我一些提示,说明我如何解决这个问题。

编辑

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

代码语言:javascript
复制
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'

我没有问题,如果我必须:

代码语言:javascript
复制
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去两个精子域,我的问题已经回答了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-05 17:25:59

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

据维护人员说,一个暂时的解决办法是使用SingleClientConnManager或PoolingClientConnectionManager。也许是这样的:

代码语言:javascript
复制
ClientConnectionManager connManager = new PoolingClientConnectionManager();
DefaultHttpClient httpclient = new DefaultHttpClient(connManager);
...
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11347635

复制
相关文章

相似问题

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