1

我目前正在掌握新的 HttpClient 库,以提供一个基本类来返回 html/css/etc。请求的 URL。使用取自此处的示例

你可以看到下面的例子:

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();
        }
    }
}

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

我对 Java 相当陌生,我了解 HTTP 的基础知识,所以我很想知道: - 虽然我使用了一个基本示例,但我做错了,要么缺少需要添加才能访问该特定 URL 的内容 - 它由于服务器端的环境设置,无法从该特定 URL 获得我想要的响应。- 你可以推荐给我的任何额外的文献或链接,让我在 Apache.org 站点之外查看

谢谢,马克

4

2 回答 2

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);
于 2013-11-02T11:53:16.527 回答
1

您必须在 DefaultHttpClient 中为连接设置超时。请参阅:http ://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html?is-external=true#SO_TIMEOUT

于 2011-12-06T22:32:44.663 回答