带有很长URL的Android HttpGet请求

时间:2011-08-31 16:48:03

标签: android

我目前面临一个奇怪的问题 我必须联系一个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;

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我认为这是一个服务器端问题,可能不会(很多)响应设置超时。您是否尝试将长网址粘贴到浏览器中?