Java中可以使用HttpURLConnection来请求WEB资源。 HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConnection对象,示例代码如下: String szUrl = "http://www.ee2ee.com/"; URL url = new URL(szUrl); HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时: System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串); System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);
其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒) sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)
例如: System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setProperty("sun.net.client.defaultReadTimeout", "30000");
JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法: setConnectTimeout:设置连接主机超时(单位:毫秒) setReadTimeout:设置从主机读取数据超时(单位:毫秒)
例如: HttpURLConnection urlCon = (HttpURLConnection)url.openConnection(); urlCon.setConnectTimeout(30000); urlCon.setReadTimeout(30000);
需要注意的是,笔者在JDK1.4.2环境下,发现在设置了defaultReadTimeout的情况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(Trouble)。我认为这是JDK1.4.2的一个bug。在JDK1.5.0中,此问题已得到解决,不存在自动重发现象。
import java.io.*; import java.net.*;
/** * @author chenzhimin * */
public class TestUrl { /** * 只能用户HTTP协议 * @param photoUrl * @param fileName * @return */ public boolean saveUrlAs(String photoUrl, String fileName) { try { URL url = new URL(photoUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); DataInputStream in = new DataInputStream(connection .getInputStream()); DataOutputStream out = new DataOutputStream(new FileOutputStream( fileName)); byte[] buffer = new byte[4096]; int count = 0; while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); } out.close(); in.close(); return true;
} catch (Exception e) { System.out.println(e); return false; } } /** * 兼容HTTP和FTP协议 * @param urlString * @return */ public String getDocumentAt(String urlString) { StringBuffer document = new StringBuffer();
try {
URL url = new URL(urlString); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { document.append(line + "\n"); } reader.close(); } catch (MalformedURLException e) { System.out.println("Unable to connect to URL: " + urlString); } catch (IOException e) { System.out.println("IOException when connecting to URL: " + urlString); } return document.toString(); }
/** * * @param args */ public static void main(String[] args) { TestUrl test = new TestUrl(); String photoUrl = "http://www.musichy.com/share/admin//20061120060438448.jpg"; String fileName = photoUrl.substring(photoUrl.lastIndexOf("/")); String filePath = "f:/bak/"; boolean flag = test.saveUrlAs(photoUrl, filePath + fileName); System.out.println("Run ok!\n Get URL file " + flag); }
} |
相关推荐
下面将详细讨论`HttpURLConnection`的超时设置、IO异常处理以及如何应对这些问题。 1. **超时设置**: - `setConnectTimeout(int timeout)`:这个方法用于设置建立网络连接的超时时间,单位为毫秒。如果在指定时间...
本文将详细讲解如何在Java环境中,通过自定义的jar包来处理SOAP请求的超时设置。 首先,`带有请求超时设置的soap jar包`意味着这个jar包已经经过了修改,允许开发者为SOAP请求指定一个自定义的超时时间。默认情况下...
11. **HttpUrlConnection超时设置**:设置HTTP连接超时的方法是`setConnectTimeout()`。 12. **assets目录用途**:assets目录用于存放资源文件,这些文件将原封不动地打包到APK中,通常用于存放不经过编译处理的...
总的来说,这段代码展示了如何利用`HttpURLConnection`进行文件下载的基本步骤,包括创建连接、设置超时、读取和写入数据。注意,实际应用中可能需要考虑更多的异常处理和错误恢复策略,以及更高效的下载策略,如...
3. 设置请求属性:如超时时间、请求头等。 4. 发送请求:对于POST请求,需要写入请求体数据。 5. 读取响应:如响应码、响应头和响应体数据。 6. 关闭连接:使用完毕后记得关闭连接,释放资源。 在`AsyncTask`中,`...
除了基本的请求和响应处理,HttpURLConnection还支持设置连接超时和读取超时,这对于防止程序在等待响应时阻塞非常重要: ```java connection.setConnectTimeout(5000); // 设置连接超时为5秒 connection....
1. 设置超时:可以设置连接超时和读取超时,防止程序卡死。 ```java connection.setConnectTimeout(5000); // 连接超时5秒 connection.setReadTimeout(10000); // 读取超时10秒 ``` 2. 使用HTTP缓存:...
默认情况下,`HttpURLConnection`没有设置超时,如果网络出现问题,程序可能会无限制地等待响应,导致程序阻塞。我们需要分别设置连接超时(connectTimeout)和读取超时(readTimeout),确保在一定时间内未得到响应...
可以设置超时时间,如`connection.setConnectTimeout(5000)`(5秒),以及读取超时,如`connection.setReadTimeout(5000)`。 5. **处理响应**: 请求发送后,`HttpURLConnection`会返回响应码,通常200表示成功。...
此外,`HttpURLConnection`还支持其他特性,如设置请求头(例如设置Content-Type、User-Agent),处理Cookie,以及通过`setInstanceFollowRedirects`控制重定向行为等。 然而,虽然`HttpURLConnection`相对低级且...
3. **设置连接属性**:可能需要设置超时时间,如读取超时和连接超时。 ```java connection.setConnectTimeout(5000); connection.setReadTimeout(5000); ``` 4. **开启请求**:这会建立实际的网络连接。 ```java ...
另外,`HttpURLConnection`支持设置超时、处理重定向等高级特性。 至于文件`jyWebClient`和`jyWebService`,它们可能是实现特定Web客户端或服务端功能的Java代码示例。这些文件可能包含了如何利用`...
在描述中提到的"重写ServiceConnectionService与HttpTransportSErvice实现超时设置",实际上是指对这两个类进行扩展以自定义超时时间。下面是如何实现这个过程: 1. 创建自定义的`ServiceConnection`: 首先,你...
在这个过程中,我们可以自定义请求头、设置超时时间、处理响应数据等。下面将详细介绍如何封装HTTPURLConnection以及实现相关功能。 1. 创建HTTP请求基础类 首先,我们需要创建一个基础的HTTP请求类,这个类通常...
设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头 conn.setConnectTimeout(6*1000); 获取服务器的响应码并进行判断,正确的响应码一般为200 if(conn.getResponseCode() != 200) 调用...
`HttpURLConnection`允许我们设置各种请求属性,比如HTTP方法、超时时间、请求头等。例如,我们可以这样设置POST请求: ```java connection.setRequestMethod("POST"); connection.setConnectTimeout(5000); // ...
通过设置合适的超时时间(connectTimeout、readTimeout)和缓存策略,可以进一步优化性能。 ### 10. 异步处理 虽然HttpURLConnection本身不支持异步操作,但可以通过线程或Java 8的CompletableFuture等技术实现异步...
7. **设置连接和读取超时**:为了避免网络延迟导致的阻塞,可以使用`setConnectTimeout()`和`setReadTimeout()`设置超时时间。 8. **获取响应码**:通过`getResponseCode()`检查服务器是否成功接收请求。200表示...
在处理文件上传时,我们通常需要设置请求方法为POST或PUT,并使用`setDoOutput(true)`开启输出流,以便向服务器发送数据。 Servlet是Java Web开发中的重要组件,用于接收和响应HTTP请求。在处理文件上传时,Servlet...
为了避免程序因等待响应而阻塞,我们可以设置连接和读取的超时: ```java connection.setConnectTimeout(5000); // 连接超时时间,单位毫秒 connection.setReadTimeout(5000); // 读取超时时间,单位毫秒 ``` ### ...