如果URL的连接时间超过5秒,我想返回false -使用Java怎么可能做到这一点?下面是我用来检查URL是否有效的代码
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
发布于 2010-05-10 10:01:35
您可以像这样设置超时,
con.setConnectTimeout(connectTimeout);
con.setReadTimeout(socketTimeout);
发布于 2014-12-22 17:31:17
如果HTTP连接没有超时,你可以在后台线程本身( AsyncTask,服务等)中实现超时检查器,下面的类是一个自定义AsyncTask的例子,它在一定时间后超时
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);
}
这方面的示例
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;
};
}
发布于 2018-02-28 21:23:31
我可以通过添加一行简单的代码来解决类似的问题。
HttpURLConnection hConn = (HttpURLConnection) url.openConnection();
hConn.setRequestMethod("HEAD");
我的要求是知道响应代码,为此,仅获取元信息就足够了,而不是获得完整的响应正文。
默认的请求方法是GET,这需要很长时间才能返回,最后抛出了SocketTimeoutException。当我将请求方法设置为HEAD时,响应非常快。
https://stackoverflow.com/questions/2799938
复制相似问题