我目前正在处理新的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网站之外查看的任何额外文献或链接
谢谢, 标记
答案 0 :(得分:1)
您必须在DefaultHttpClient中为连接设置超时。请参阅:http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html?is-external=true#SO_TIMEOUT
答案 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);