问题描述
- 关于httpURLConnnection 是否可以阻塞式的获取数据
-
用httpconnection做获取数据的操作,在建立了connection实体后,直接调用getResponseCode(),然后直接返回流读写异常。我设置了5秒超时,但是根本就没有执行5秒。
类似于httpClient的话,他的execute可以阻塞,我设置5秒超时,他会等5秒,没获取到数据然后抛异常。我想知道httpconnection能否类似的做到。貌似connect()方法是会阻塞,但是后面加上getResponseCode()或者getInputStream()又会直接抛异常,设了超时根本就不等待了。不知道有大神能帮下不。
解决方案
报错信息都贴出来看看吧。
解决方案二:
不是错误 比如这段代码
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.connect();
int code = conn.getResponseCode();
在设置了5000ms的超时后,程序在执行 conn.connect(); 后没有阻塞,继续往下执行,在 int code = conn.getResponseCode(); 由于调用 getInputStream(),而抛出IO异常。没等5秒。
HttpGet getMethod = new HttpGet(url);
HttpClient httpClient = getHttpClient();
HttpResponse response = httpClient.execute(getMethod);
if(response.getStatusLine().getStatusCode() == 200)
上面的代码,我给httpclient设置了5000毫秒的超时,程序执行到 httpClient.execute(getMethod) ,如果没有活得数据,会阻塞式的一直获取,直到5秒秒超时,抛出超时异常。
我希望的是httpConnection 可以有类似的方法,会阻塞式的获取数据,能体现出有5秒的等待。
时间: 2024-09-15 10:44:27