为什么我的HttpClient类会冻结某些URL

时间:2011-12-06 22:27:05

标签: java http apache-httpclient-4.x apache-httpcomponents

我目前正在处理新的HttpClient库,想出一个返回html / css / etc的基本类。请求的URL。使用取自here

的示例

您可以看到以下示例:

package test;

import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

public class Test {

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

        HttpClient httpclient = new DefaultHttpClient();
        try {
            HttpGet httpget = new HttpGet("http://www.cwjobs.co.uk/");
            System.out.println("executing request " + httpget.getURI());

            // Create a response handler
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String responseBody = httpclient.execute(httpget, responseHandler);

            System.out.println(responseBody);
        } finally {
            httpclient.getConnectionManager().shutdown();
        }
    }
}

我遇到的问题是,如果我要设置我想要请求的网址http://www.google.com,那么它会打印出我需要的响应。但是,当我使用诸如www.cwjobs.co.uk之类的URL(仅用作示例)时,它会冻结执行方法。

我是Java的新手,我理解HTTP的基础知识,所以我很想知道:   - 虽然我已经使用了一个基本的例子,但是由于错过了需要添加以访问特定URL的内容,我做错了   - 由于服务器端的环境设置,无法从该特定URL获得我想要的响应。   - 您可以建议我在Apache.org网站之外查看的任何额外文献或链接

谢谢, 标记

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

现在不推荐使用此代码(获取HttpParams等)。更好的方法是:

RequestConfig defaultRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).setExpectContinueEnabled(true).setStaleConnectionCheckEnabled(true).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)).setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();

HttpGet httpGet = new HttpGet(url);    
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig).setSocketTimeout(5000).setConnectTimeout(5000).setConnectionRequestTimeout(5000).build();
httpGet.setConfig(requestConfig);