我目前面临一个奇怪的问题
我必须联系一个Web服务,它有一个很长的URL(里面有一些XML)。其中一个的长度为 943 个字符
大多数情况下,请求因NoHttpResponseException而失败
我新添加了一个RetryHandler,它完成了他的工作,请求终于有效,但执行时间 246 秒!
我将超时时间减少到30秒,偶尔请求工作
有没有什么可以了解长URL以使其更好地工作?
或者,它是否仅在Android上被禁止?
我确切地说,与另一个更小的URL(甚至像 200 字符)的所有连接都能完美地工作。
这里是Http连接的源代码:
DefaultHttpClient hc = new DefaultHttpClient();
HttpProtocolParams.setUseExpectContinue(hc.getParams(), false);
HttpParams httpParameters = hc.getParams();
// Set the timeout in milliseconds until a connection is established.
int timeoutConnection = 5000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 10000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
hc.setParams(httpParameters);
HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount,
HttpContext context) {
// retry a max of x times
if(executionCount >= 5){
return false;
}
if(exception instanceof NoHttpResponseException){
return true;
} else if (exception instanceof ClientProtocolException){
return true;
}
return false;
}
};
hc.setHttpRequestRetryHandler(retryHandler);
url = Tool.prepareURL(url);
Log.d(LogFilter.EXECUTE, url);
HttpGet get = new HttpGet(url);
if (eTag != null) {
get.addHeader(HEADER_IF_NONE_MATCH, eTag);
}
long time = System.currentTimeMillis();
HttpResponse rp = hc.execute(get);
Log.d(LogFilter.EXECUTE, "temps execute: "+(System.currentTimeMillis()-time));
return rp;
感谢您的时间。
答案 0 :(得分:0)
我认为这是一个服务器端问题,可能不会(很多)响应设置超时。您是否尝试将长网址粘贴到浏览器中?