java.lang.Object java.net.URLConnection
public abstract class URLConnection
抽象类 URLConnection
是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
openConnection() |
connect() |
---|---|
对影响到远程资源连接的参数进行操作。 | 与资源交互;查询头字段和内容。 |
openConnection
方法创建连接对象。connect
方法建立到远程对象的实际连接。使用以下方法修改设置参数:
setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
使用以下方法修改一般请求属性:
setRequestProperty
使用 setDefaultAllowUserInteraction
和 setDefaultUseCaches
可设置 AllowUserInteraction
和 UseCaches
参数的默认值。
上面每个 set
方法都有一个用于检索参数值或一般请求属性值的对应 get
方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
getContent
getHeaderField
getInputStream
getOutputStream
某些头字段需要经常访问。以下方法:
getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
提供对这些字段的便捷访问。getContent
方法使用 getContentType
方法以确定远程对象类型;子类重写 getContentType
方法很容易。
一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个感兴趣的方法:getInputStream
和getContent
,它们通过便捷方法镜像到 URL
类中。
有关 http
连接的请求属性和头字段的更多信息,可从以下位置找到:
有关http://www.ietf.org/rfc/rfc2068.txt
fileNameMap
的注意事项:在 JDK 1.1.6 以前的版本中,
URLConnection
的
fileNameMap
为公开字段。在 JDK 1.1.6 及以后的版本中,
fileNameMap
为私有;对其添加了 accessor 和 mutator 方法
getFileNameMap
及
setFileNameMap
以便访问。 Compatibility 页中也对此更改进行了介绍。 完成请求后,在一个
URLConnection 的
InputStream 或
OutputStream 上调用
close()方法可能释放与此实例相关的网络资源,除非特定的协议规范为其指定了其他行为。
URL.openConnection()
,
connect()
,
getContent()
,
getContentEncoding()
,
getContentLength()
,
getContentType()
,
getDate()
,
getExpiration()
,
getHeaderField(int)
,
getHeaderField(java.lang.String)
,
getInputStream()
,
getLastModified()
,
getOutputStream()
,
setAllowUserInteraction(boolean)
,
setDefaultUseCaches(boolean)
,
setDoInput(boolean)
,
setDoOutput(boolean)
,
setIfModifiedSince(long)
,
setRequestProperty(java.lang.String, java.lang.String)
,
setUseCaches(boolean)
字段摘要 | |
---|---|
protected boolean |
allowUserInteraction 如果为 true ,则在允许用户交互(例如弹出一个身份验证对话框)的上下文中对此 URL 进行检查。 |
protected boolean |
connected 如果为 false ,则此连接对象尚未创建到指定 URL 的通信链接。 |
protected boolean |
doInput 此变量由 setDoInput 方法设置。 |
protected boolean |
doOutput 此变量由 setDoOutput 方法设置。 |
protected long |
ifModifiedSince 有些协议支持跳过对象获取,除非该对象在某个特定时间点之后又进行了修改。 |
protected URL |
url URL 表示此连接要在互联网上打开的远程对象。 |
protected boolean |
useCaches 如果为 true ,则只要有条件就允许协议使用缓存。 |
构造方法摘要 | |
---|---|
protected |
URLConnection(URL url) 构造一个到指定 URL 的 URL 连接。 |
方法摘要 | |
---|---|
void |
addRequestProperty(String key, String value) 添加由键值对指定的一般请求属性。 |
abstract void |
connect() 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 |
boolean |
getAllowUserInteraction() 返回此对象的 allowUserInteraction 字段的值。 |
int |
getConnectTimeout() 返回连接超时设置。 |
Object |
getContent() 检索此 URL 连接的内容。 |
Object |
getContent(Class[] classes) 检索此 URL 连接的内容。 |
String |
getContentEncoding() 返回 content-encoding 头字段的值。 |
int |
getContentLength() 返回 content-length 头字段的值。 |
String |
getContentType() 返回 content-type 头字段的值。 |
long |
getDate() 返回 date 头字段的值。 |
static boolean |
getDefaultAllowUserInteraction() 返回 allowUserInteraction 字段的默认值。 |
static String |
getDefaultRequestProperty(String key) 已过时。 应在获得 URLConnection 的适当实例后使用特定 getRequestProperty 方法的实例。 |
boolean |
getDefaultUseCaches() 返回 URLConnection 的 useCaches 标志的默认值。 |
boolean |
getDoInput() 返回此 URLConnection 的 doInput 标志的值。 |
boolean |
getDoOutput() 返回此 URLConnection 的 doOutput 标志的值。 |
long |
getExpiration() 返回 expires 头字段的值。 |
static FileNameMap |
getFileNameMap() 从数据文件加载文件名映射(一个 mimetable)。 |
String |
getHeaderField(int n) 返回第 n 个头字段的值。 |
String |
getHeaderField(String name) 返回指定的头字段的值。 |
long |
getHeaderFieldDate(String name, long Default) 返回解析为日期的指定字段的值。 |
int |
getHeaderFieldInt(String name, int Default) 返回解析为数字的指定字段的值。 |
String |
getHeaderFieldKey(int n) 返回第 n 个头字段的键。 |
Map |
getHeaderFields() 返回头字段的不可修改的 Map。 |
long |
getIfModifiedSince() 返回此对象的 ifModifiedSince 字段的值。 |
InputStream |
getInputStream() 返回从此打开的连接读取的输入流。 |
long |
getLastModified() 返回 last-modified 头字段的值。 |
OutputStream |
getOutputStream() 返回写入到此连接的输出流。 |
Permission |
getPermission() 返回一个权限对象,其代表建立此对象表示的连接所需的权限。 |
int |
getReadTimeout() 返回读入超时设置。 |
Map |
getRequestProperties() 返回一个由此连接的一般请求属性构成的不可修改的 Map。 |
String |
getRequestProperty(String key) 返回此连接指定的一般请求属性值。 |
URL |
getURL() 返回此 URLConnection 的 URL 字段的值。 |
boolean |
getUseCaches() 返回此 URLConnection 的 useCaches 字段的值。 |
static String |
guessContentTypeFromName(String fname) 根据 URL 的指定 "file" 部分尝试确定对象的内容类型。 |
static String |
guessContentTypeFromStream(InputStream is) 根据输入流的开始字符尝试确定输入流的类型。 |
void |
setAllowUserInteraction(boolean allowuserinteraction) 设置此 URLConnection 的 allowUserInteraction 字段的值。 |
void |
setConnectTimeout(int timeout) 设置一个指定的超时值(以毫秒为单位),该值将在打开到此 URLConnection 引用的资源的通信链接时使用。 |
static void |
setContentHandlerFactory(ContentHandlerFactory fac) 设置应用程序的 ContentHandlerFactory 。 |
static void |
setDefaultAllowUserInteraction(boolean defaultallowuserinteraction) 将未来的所有 URLConnection 对象的 allowUserInteraction 字段的默认值设置为指定的值。 |
static void |
setDefaultRequestProperty(String key, String value) 已过时。 应在获得 URLConnection 的适当实例后使用特定 setRequestProperty 方法的实例。调用此方法没有任何作用。 |
void |
setDefaultUseCaches(boolean defaultusecaches) 将 useCaches 字段的默认值设置为指定的值。 |
void |
setDoInput(boolean doinput) 将此 URLConnection 的 doInput 字段的值设置为指定的值。 |
void |
setDoOutput(boolean dooutput) 将此 URLConnection 的 doOutput 字段的值设置为指定的值。 |
static void |
setFileNameMap(FileNameMap map) 设置 FileNameMap。 |
void |
setIfModifiedSince(long ifmodifiedsince) 将此 URLConnection 的 ifModifiedSince 字段的值设置为指定的值。 |
void |
setReadTimeout(int timeout) 将读超时设置为指定的超时,以毫秒为单位。 |
void |
setRequestProperty(String key, String value) 设置一般请求属性。 |
void |
setUseCaches(boolean usecaches) 将此 URLConnection 的 useCaches 字段的值设置为指定的值。 |
String |
toString() 返回此 URL 连接的 String 表示形式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
protected URL url
使用 getURL
方法可访问此字段的值。
此变量的默认值为 URLConnection
构造方法中的 URL 参数的值。
getURL()
,
url
protected boolean doInput
setDoInput
方法设置。其值由
getDoInput
方法返回。
URL 连接可用于输入和/或输出。将 doInput
标志设置为 true
,指示应用程序要从 URL 连接读取数据。
此字段的默认值为 true
。
getDoInput()
,
setDoInput(boolean)
protected boolean doOutput
setDoOutput
方法设置。其值由
getDoOutput
方法返回。
URL 连接可用于输入和/或输出。将 doOutput
标志设置为 true
,指示应用程序要将数据写入 URL 连接。
此字段的默认值为 false
。
getDoOutput()
,
setDoOutput(boolean)
protected boolean allowUserInteraction
true
,则在允许用户交互(例如弹出一个身份验证对话框)的上下文中对此
URL
进行检查。如果为
false
,则不允许有任何用户交互。
使用 setAllowUserInteraction
方法可对此字段的值进行设置。其值由 getAllowUserInteraction
方法返回。其默认值为上一次调用 setDefaultAllowUserInteraction
方法所用的参数的值。
getAllowUserInteraction()
,
setAllowUserInteraction(boolean)
,
setDefaultAllowUserInteraction(boolean)
protected boolean useCaches
true
,则只要有条件就允许协议使用缓存。如果为
false
,则该协议始终必须获得此对象的新副本。
此字段由 setUseCaches
方法设置。其值由 getUseCaches
方法返回。
其默认值为上一次调用 setDefaultUseCaches
方法时给定的值。
setUseCaches(boolean)
,
getUseCaches()
,
setDefaultUseCaches(boolean)
protected long ifModifiedSince
一个非零的值给定一个时间,它表示距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。只有在该时间之后又进行了修改时,才获取该对象。
此变量由 setIfModifiedSince
方法设置。其值由 getIfModifiedSince
方法返回。
此字段的默认值为 0
,指示必须一直进行捕获。
getIfModifiedSince()
,
setIfModifiedSince(long)
protected boolean connected
false
,则此连接对象尚未创建到指定 URL 的通信链接。如果为
true
,则已经建立了通信链接。
构造方法详细信息 |
---|
protected URLConnection(URL url)
url
- 指定的 URL。
方法详细信息 |
---|
public static FileNameMap getFileNameMap()
setFileNameMap(java.net.FileNameMap)
public static void setFileNameMap(FileNameMap map)
如果有安全管理器,此方法首先调用安全管理器的 checkSetFactory
方法以确保允许该操作。这可能会导致抛出 SecurityException 异常。
map
- 要设置的 FileNameMap
SecurityException
- 如果安全管理器存在并且其
checkSetFactory
方法不允许进行此操作。
SecurityManager.checkSetFactory()
,
getFileNameMap()
public abstract void connect() throws IOException
如果在已打开连接(此时 connected
字段的值为 true
)的情况下调用 connect
方法,则忽略该调用。
URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。在创建对象之后,建立连接之前,可指定各种选项(例如,doInput 和 UseCaches)。连接后再进行设置就会发生错误。连接后才能进行的操作(例如 getContentLength),如有必要,将隐式执行连接。
SocketTimeoutException
- 如果在建立连接之前超时期满
IOException
- 如果打开连接时发生 I/O 错误。
connected
,
getConnectTimeout()
,
setConnectTimeout(int)
public void setConnectTimeout(int timeout)
此方法的一些非标准实现可能忽略指定的超时。要查看连接超时设置,请调用 getConnectTimeout()。
timeout
- 一个指定连接超时值的
int
,以毫秒为单位
IllegalArgumentException
- 如果超时参数为负
getConnectTimeout()
,
connect()
public int getConnectTimeout()
返回 0 表明该选项被禁用(即超时为无穷大)。
int
,以毫秒为单位
setConnectTimeout(int)
,
connect()
public void setReadTimeout(int timeout)
此方法的一些非标准实现会忽略指定的超时。要查看读入超时设置,请调用 getReadTimeout()。
timeout
- 一个指定要使用的超时值的
int
,以毫秒为单位
IllegalArgumentException
- 如果超时参数为负
getReadTimeout()
,
InputStream.read()
public int getReadTimeout()
int
,以毫秒为单位
setReadTimeout(int)
,
InputStream.read()
public URL getURL()
URLConnection
的
URL
字段的值。
URLConnection
的
URL
字段的值。
url
public int getContentLength()
content-length
头字段的值。
-1
。
public String getContentType()
content-type
头字段的值。
null
。
getHeaderField(java.lang.String)
public String getContentEncoding()
content-encoding
头字段的值。
null
。
getHeaderField(java.lang.String)
public long getExpiration()
expires
头字段的值。
getHeaderField(java.lang.String)
public long getDate()
date
头字段的值。
0
。返回的值为距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。
getHeaderField(java.lang.String)
public long getLastModified()
last-modified
头字段的值。结果为距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。
URLConnection
引用的资源的上次修改日期,或者如果为未知,则返回 0。
getHeaderField(java.lang.String)
public String getHeaderField(String name)
如果在连接上调用时多次设置头字段的值,每次设置的值又可能不同,则只返回最后一个设置的值。
name
- 头字段的名称。
null
。
public Map> getHeaderFields()
public int getHeaderFieldInt(String name, int Default)
有些连接类型(例如 http-ng
)具有预解析头,所以存在这种形式的 getHeaderField
。用于这种连接类型的类可重写此方法从而解析过程。
name
- 头字段的名称。
Default
- 默认值。
Default
值。
public long getHeaderFieldDate(String name, long Default)
有些连接类型(例如 http-ng
)具有预解析头,所以存在这种形式的 getHeaderField
。用于该类型的连接可重写此方法和缩短解析过程。
name
- 头字段的名称。
Default
- 默认值。
Default
参数的值。
public String getHeaderFieldKey(int n)
n
个头字段的键。如果少于
n+1
个字段,则返回
null
。
n
- 一个索引,n>=0
n
个头字段的键,或者如果少于
n+1
个字段,则返回
null
。
public String getHeaderField(int n)
n
个头字段的值。如果少于
n+1
个字段,则返回
null
。
此方法可与 getHeaderFieldKey
方法配合使用,以迭代消息中的所有头。
n
- 一个索引,n>=0
n
个头字段的值,或者如果少于
n+1
个字段,则返回
null
getHeaderFieldKey(int)
public Object getContent() throws IOException
此方法首先通过调用 getContentType
方法确定对象的内容类型。如果这是该应用程序第一次遇到的特定内容类型,则会创建适用于该类型的内容处理程序:
setContentHandlerFactory
方法建立了内容处理程序工厂实例,则调用此实例的 createContentHandler
方法,内容类型为其中的一个参数;结果为该内容类型的内容处理程序。createContentHandler
方法返回 null
,则应用程序会加载以下名称的类:
其中,<contentType> 取自 content-type 字符串,将所有的斜杠字符用sun.net.www.content.<contentType>
句点
('.')替换,所有其他非字母数字字符用下划线 '_
'替换。字母数字字符特指 26 个大写 ASCII 字母 'A
' 到 'Z
',26 个小写 ASCII 字母 'a
' 到 'z
'以及 10 个 ASCII 数字 '0
' 到 '9
'。如果指定的类不存在,或者不是 ContentHandler
的子类,则抛出一个UnknownServiceException
。instanceof
运算符来确定返回的对象的具体类型。
IOException
- 如果获取内容时发生 I/O 错误。
UnknownServiceException
- 如果协议不支持内容类型。
ContentHandlerFactory.createContentHandler(java.lang.String)
,
getContentType()
,
setContentHandlerFactory(java.net.ContentHandlerFactory)
public Object getContent(Class[] classes) throws IOException
classes
- 指示请求的类型的
Class
数组
instanceof
运算符来确定返回的对象的具体类型。
IOException
- 如果获取内容时发生 I/O 错误。
UnknownServiceException
- 如果协议不支持内容类型。
getContent()
,
ContentHandlerFactory.createContentHandler(java.lang.String)
,
getContent(java.lang.Class[])
,
setContentHandlerFactory(java.net.ContentHandlerFactory)
public Permission getPermission() throws IOException
java.security.AllPermission
。子类应重写此方法并返回一个权限对象,该对象最能代表用于建立到 URL 的连接所需的权限。例如表示
file:
URL 的
URLConnection
将返回
java.io.FilePermission
对象。
返回的权限可能取决于连接的状态。例如,连接之前的权限可能不同于连接之后的权限。例如,一个 HTTP 服务器(如 foo.com)可能将连接重定向到一台不同的主机(如 bar.com)。在连接之前,连接返回的权限将代表连接到 foo.com 所需的权限,而连接之后返回的权限将是连接到 bar.com 所需的权限。
使用权限通常有两个目的:保护通过 URLConnection 获取的对象的缓存;检查接收方的权限以了解特定的 URL。第一种情况下,应在获取对象之后 再获取权限。例如,在一个 HTTP 连接中,这将代表连接到最终将从该主机获取数据的主机的权限。第二种情况下,应在连接之前 对权限进行获取和检查。
IOException
- 如果计算权限需要网络或文件 I/O 并且在计算过程中出现异常。
public InputStream getInputStream() throws IOException
IOException
- 如果在创建输入流时发生 I/O 错误。
UnknownServiceException
- 如果协议不支持输入。
setReadTimeout(int)
,
getReadTimeout()
public OutputStream getOutputStream() throws IOException
IOException
- 如果在创建输出流时发生 I/O 错误。
UnknownServiceException
- 如果协议不支持输出。
public String toString()
String
表示形式。
Object
中的
toString
URLConnection
的字符串表示形式。
public void setDoInput(boolean doinput)
URLConnection
的
doInput
字段的值设置为指定的值。
URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
doinput
- 新值。
IllegalStateException
- 如果已连接
doInput
,
getDoInput()
public boolean getDoInput()
URLConnection
的
doInput
标志的值。
URLConnection
的
doInput
标志的值。
setDoInput(boolean)
public void setDoOutput(boolean dooutput)
URLConnection
的
doOutput
字段的值设置为指定的值。
URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
dooutput
- 新值。
IllegalStateException
- 如果已连接
getDoOutput()
public boolean getDoOutput()
URLConnection
的
doOutput
标志的值。
URLConnection
的
doOutput
标志的值。
setDoOutput(boolean)
public void setAllowUserInteraction(boolean allowuserinteraction)
URLConnection
的
allowUserInteraction
字段的值。
allowuserinteraction
- 新值。
IllegalStateException
- 如果已连接
getAllowUserInteraction()
public boolean getAllowUserInteraction()
allowUserInteraction
字段的值。
allowUserInteraction
字段的值。
setAllowUserInteraction(boolean)
public static void setDefaultAllowUserInteraction(boolean defaultallowuserinteraction)
URLConnection
对象的
allowUserInteraction
字段的默认值设置为指定的值。
defaultallowuserinteraction
- 新值。
getDefaultAllowUserInteraction()
public static boolean getDefaultAllowUserInteraction()
allowUserInteraction
字段的默认值。
默认值为 "sticky",它是所有 URLConnection 的其中一种静态状态。此标志适用于下一个及后续创建的所有 URLConnection。
allowUserInteraction
字段的默认值。
setDefaultAllowUserInteraction(boolean)
public void setUseCaches(boolean usecaches)
URLConnection
的
useCaches
字段的值设置为指定的值。
有些协议用于文档缓存。有时候能够进行“直通”并忽略缓存尤其重要,例如浏览器中的“重新加载”按钮。如果连接中的 UseCaches 标志为 true,则允许连接使用任何可用的缓存。如果为 false,则忽略缓存。默认值来自 DefaultUseCaches,它默认为 true。
usecaches
- 一个指示是否允许缓存的
boolean
值
IllegalStateException
- 如果已连接
getUseCaches()
public boolean getUseCaches()
URLConnection
的
useCaches
字段的值。
URLConnection
的
useCaches
字段的值。
setUseCaches(boolean)
public void setIfModifiedSince(long ifmodifiedsince)
URLConnection
的
ifModifiedSince
字段的值设置为指定的值。
ifmodifiedsince
- 新值。
IllegalStateException
- 如果已连接
getIfModifiedSince()
public long getIfModifiedSince()
ifModifiedSince
字段的值。
ifModifiedSince
字段的值。
setIfModifiedSince(long)
public boolean getDefaultUseCaches()
URLConnection
的
useCaches
标志的默认值。
默认值为 "sticky",它属于所有 URLConnection 的静态中的一部分。此标志适用于所有文本以及后续创建的所有 URLConnection。
URLConnection
的
useCaches
标志的默认值。
setDefaultUseCaches(boolean)
public void setDefaultUseCaches(boolean defaultusecaches)
useCaches
字段的默认值设置为指定的值。
defaultusecaches
- 新值。
getDefaultUseCaches()
public void setRequestProperty(String key, String value)
注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
key
- 用于识别请求的关键字(例如,"
accept
")。
value
- 与该键关联的值。
IllegalStateException
- 如果已连接
NullPointerException
- 如果键为
null
getRequestProperty(java.lang.String)
public void addRequestProperty(String key, String value)
key
- 用于识别请求的关键字(例如,"
accept
")。
value
- 与该键关联的值。
IllegalStateException
- 如果已连接
NullPointerException
- 如果键为 null
getRequestProperties()
public String getRequestProperty(String key)
key
- 用于识别请求的关键字(例如,"accept")。
IllegalStateException
- 如果已连接
setRequestProperty(java.lang.String, java.lang.String)
public Map> getRequestProperties()
IllegalStateException
- 如果已连接
@Deprecated
public static void setDefaultRequestProperty(String key,
String value)
URLConnection
时,用这些属性进行初始化。
key
- 用于识别请求的关键字(例如,"
accept
")。
value
- 与该键关联的值。
setRequestProperty(java.lang.String,java.lang.String)
,
getDefaultRequestProperty(java.lang.String)
@Deprecated
public static String getDefaultRequestProperty(String key)
key
- 用于识别请求的关键字(例如,"accept")。
getRequestProperty(java.lang.String)
,
setDefaultRequestProperty(java.lang.String, java.lang.String)
public static void setContentHandlerFactory(ContentHandlerFactory fac)
ContentHandlerFactory
。一个应用程序最多只能调用一次该方法。
ContentHandlerFactory
实例用于根据内容类型构造内容处理程序。
如果有安全管理器,此方法首先调用安全管理器的 checkSetFactory
方法以确保允许该操作。这可能会导致 SecurityException 异常。
fac
- 需要的工厂。
Error
- 如果已经定义了工厂。
SecurityException
- 如果安全管理器存在并且其
checkSetFactory
方法不允许进行此操作。
ContentHandlerFactory
,
getContent()
,
SecurityManager.checkSetFactory()
public static String guessContentTypeFromName(String fname)
getContentType
方法的子类可使用该便捷方法。
fname
- 文件名。
getContentType()
public static String guessContentTypeFromStream(InputStream is) throws IOException
getContentType
方法的子类使用。
理想情况下,将不需要此例程。但是许多 http
服务器返回不正确的内容类型;另外,还存在许多非标准扩展。通过对字节直接观察来确定内容类型比相信 http
服务器声明的内容类型更准确。
is
- 支持标记的输入流。
null
。
IOException
- 如果在读取输入流时发生 I/O 错误。
InputStream.mark(int)
,
InputStream.markSupported()
,
getContentType()