URLConnection和HttpURLConnection类

配置URLConnection

在实际建立连接之前,我们可以配置影响客户端和服务器之间正在进行的通信的各个方面,例如超时,缓存,HTTP请求方法等。

该URLConnection的类提供了配置连接下面的方法:

    setConnectTimeout(int timeout):设置连接超时(以毫秒为单位)。一个java.net.SocketTimeoutException如果超时可以建立连接之前被抛出。超时为零表示无限超时(默认值)。

    setReadTimeout(int timeout):设置读取超时(以毫秒为单位)。超时到期后,没有可用于从连接的输入流中读取的数据,将引发SocketTimeoutException。超时为零表示无限超时(默认值)。

    setDefaultUseCaches(boolean default):设置URLConnection是否默认使用缓存(默认为true)。此方法会影响URLConnection类的未来实例。

    setUseCaches(boolean useCaches):设置此连接是否使用缓存(默认为true)。

    setDoInput(boolean doInput):设置此URLConnection是否可用于从服务器读取内容(默认为true)。

    setDoOutput(boolean doOutput):设置是否可以使用此URLConnection将数据发送到服务器(默认为false)。

    setIfModifiedSince(long time):设置客户端检索的内容的最后修改时间,主要用于HTTP协议。例如,如果服务器发现内容自指定时间以来没有改变,则它不获取内容并返回状态代码304-未修改。如果客户端的修改时间超过了指定时间,则客户端将获得新鲜内容。

    setAllowUserInteraction(boolean allow):启用或禁用用户交互,例如,如果需要,弹出一个身份验证对话框(默认为false)。

    setDefaultAllowUserInteraction(boolean default):为所有未来的URLConnection对象设置用户交互的默认值。

    setRequestProperty(String key,String value):设置由key = value对指定的常规请求属性。如果具有密钥的属性已存在,则旧值将被新值覆盖。

请注意,应在建立连接之前调用这些方法。如果已建立连接,则某些方法会抛出IllegalStateException。

此外,子类HttpURLConnection提供了以下用于使用HTTP特定功能配置连接的方法

    setRequestMethod(String method):设置URL请求的方法,它是HTTP方法GET,POST,HEAD,OPTIONS,PUT,DELETE和TRACE之一。默认方法是GET(注意:这里方法类型必须大写)。

    setChunkedStreamingMode(int chunkLength):当高级内容未知内容长度时,启用HTTP请求主体的流式传输而不进行内部缓冲。

    setFixedLengthStreamingMode(long contentLength):当高级已知内容长度时,启用HTTP请求主体的流式传输而不进行内部缓冲。

    setFollowRedirects(boolean follow):此静态方法设置是否应该由此类的未来对象自动跟随HTTP重定向(默认为true)。

    setInstanceFollowRedirects(boolean follow):设置HTTP重定向是否应该自动跟随此HttpURLConnection类的实例(默认为true)。

 
阅读标题字段

建立连接后,服务器将处理URL请求并发回包含元数据和实际内容的响应。元数据是key = value对的集合,称为标题字段。

标题字段显示有关服务器,状态代码,协议信息等的信息。实际内容可以是文本,HTML,图像等,具体取决于文档的类型。

所述的URLConnection类提供用于读取头字段下面的方法:

 

    getHeaderFields():返回包含所有标题字段的映射。键是字段名称,值是String列表,表示相应的字段值。

    getHeaderField(int n):读取第n个头字段的值。

    getHeaderField(String name):读取指定头字段的值。

    getHeaderFieldKey(int n):读取第n个头字段的键。

    getHeaderFieldDate(String name,long default):读取解析为Date的命名字段的值。如果字段丢失或值格式错误,则返回默认值。

    getHeaderFieldInt(String name,int default):读取被解析为整数的命名字段的值。如果字段丢失或值格式错误,则返回默认值。

    getHeaderFieldLong(String name,long default):读取被解析为长数字的命名字段的值。如果字段丢失或值格式错误,则返回默认值。

这些是读取任何标题字段的一般方法。对于一些经常访问的头字段,URLConnection类提供了更具体的方法:

    getContentEncoding():读取内容编码头字段的值,该字段指示内容的编码类型。

    getContentLength():读取content-length头字段的值,该字段指示内容的大小(以字节为单位)。

    getContentType():读取content-type头字段的值,该字段指示内容的类型。

    getDate():读取日期标题字段的值,该字段指示服务器上的日期时间。

    getExpiration():读取expires头字段的值,指示响应被视为过时的时间。这是用于缓存控制。

    getLastModified():读取上次修改的头字段的值,该字段指示内容的上次​​修改时间。

子类HttpURLConnection提供了另一种方法:

    getResponseCode():返回服务器发送的HTTP状态码。

请注意,读取头字段时,将隐式建立连接,而不调用connect()。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值