首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HttpURLConnection超时设置

HttpURLConnection超时设置
EN

Stack Overflow用户
提问于 2010-05-10 09:55:46
回答 3查看 216.2K关注 0票数 135

如果URL的连接时间超过5秒,我想返回false -使用Java怎么可能做到这一点?下面是我用来检查URL是否有效的代码

代码语言:javascript
复制
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
EN

回答 3

Stack Overflow用户

发布于 2010-05-10 10:01:35

您可以像这样设置超时,

代码语言:javascript
复制
con.setConnectTimeout(connectTimeout);
con.setReadTimeout(socketTimeout);
票数 123
EN

Stack Overflow用户

发布于 2014-12-22 17:31:17

如果HTTP连接没有超时,你可以在后台线程本身( AsyncTask,服务等)中实现超时检查器,下面的类是一个自定义AsyncTask的例子,它在一定时间后超时

代码语言:javascript
复制
public abstract class AsyncTaskWithTimer<Params, Progress, Result> extends
    AsyncTask<Params, Progress, Result> {

private static final int HTTP_REQUEST_TIMEOUT = 30000;

@Override
protected Result doInBackground(Params... params) {
    createTimeoutListener();
    return doInBackgroundImpl(params);
}

private void createTimeoutListener() {
    Thread timeout = new Thread() {
        public void run() {
            Looper.prepare();

            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {

                    if (AsyncTaskWithTimer.this != null
                            && AsyncTaskWithTimer.this.getStatus() != Status.FINISHED)
                        AsyncTaskWithTimer.this.cancel(true);
                    handler.removeCallbacks(this);
                    Looper.myLooper().quit();
                }
            }, HTTP_REQUEST_TIMEOUT);

            Looper.loop();
        }
    };
    timeout.start();
}

abstract protected Result doInBackgroundImpl(Params... params);
}

这方面的示例

代码语言:javascript
复制
public class AsyncTaskWithTimerSample extends AsyncTaskWithTimer<Void, Void, Void> {

    @Override
    protected void onCancelled(Void void) {
        Log.d(TAG, "Async Task onCancelled With Result");
        super.onCancelled(result);
    }

    @Override
    protected void onCancelled() {
        Log.d(TAG, "Async Task onCancelled");
        super.onCancelled();
    }

    @Override
    protected Void doInBackgroundImpl(Void... params) {
        // Do background work
        return null;
    };
 }
票数 1
EN

Stack Overflow用户

发布于 2018-02-28 21:23:31

我可以通过添加一行简单的代码来解决类似的问题。

代码语言:javascript
复制
HttpURLConnection hConn = (HttpURLConnection) url.openConnection();
hConn.setRequestMethod("HEAD");

我的要求是知道响应代码,为此,仅获取元信息就足够了,而不是获得完整的响应正文。

默认的请求方法是GET,这需要很长时间才能返回,最后抛出了SocketTimeoutException。当我将请求方法设置为HEAD时,响应非常快。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2799938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档