public abstract class URLConnection extends Object
URLConnection
是表示应用程序和URL之间的通信链接的所有类的超类。
该类的实例可以用于从URL引用的资源中读取和写入。
通常,创建与URL的连接是一个多步骤过程:
openConnection()
connect()
Manipulate parameters that affect the connection to the remote resource. Interact with the resource; query header fields and contents.
openConnection
方法创建连接对象。 connect
方法实现与远程对象的实际连接。 使用以下方法修改设置参数:
setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
并且使用以下方法修改一般请求属性:
setRequestProperty
可以使用方法setDefaultAllowUserInteraction
和setDefaultUseCaches
设置AllowUserInteraction
和UseCaches
参数的默认值。
上述set
方法中的每一个都具有相应的get
方法来检索参数或一般请求属性的值。 适用的具体参数和一般请求属性是特定于协议的。
使用以下方法访问头域和连接远程对象后的内容:
getContent
getHeaderField
getInputStream
getOutputStream
某些头字段经常被访问。 方法:
getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
提供方便的访问这些领域。 getContentType
方法由getContent
方法用于确定远程对象的类型; 子类可能会方便地覆盖getContentType
方法。
在常见情况下,所有预连接参数和一般请求属性都可以忽略:预连接参数和请求属性默认为明智的值。 对于这个界面的大多数客户端,只有两个有趣的方法: getInputStream
和getContent
,它们通过方便的方法镜像在URL
类中。
在请求属性和报头字段的更多信息http
连接可以被发现在:
调用http://www.ietf.org/rfc/rfc2616.txt
close()
上方法InputStream
或OutputStream
一个的URLConnection
的请求后,可能释放与此实例相关联的网络资源,除非特定的协议规范为其指定不同的行为。
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)
Modifier and Type | Field and Description |
---|---|
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 ,协议允许使用缓存,只要它可以。
|
Modifier | Constructor and Description |
---|---|
protected |
URLConnection(URL url)
构造与指定URL的URL连接。
|
Modifier and Type | Method and Description |
---|---|
void |
addRequestProperty(String key, String value)
添加由键值对指定的一般请求属性。
|
abstract void |
connect()
打开与此URL引用的资源的通信链接,如果此类连接尚未建立。
|
boolean |
getAllowUserInteraction()
返回此对象的
allowUserInteraction 字段的值。
|
int |
getConnectTimeout()
返回连接超时的设置。
|
Object |
getContent()
检索此URL连接的内容。
|
Object |
getContent(类[] classes)
检索此URL连接的内容。
|
String |
getContentEncoding()
返回
content-encoding 标题字段的值。
|
int |
getContentLength()
返回
content-length 标题字段的值。
|
long |
getContentLengthLong()
返回
content-length 标头字段的值为long。
|
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()
从数据文件加载文件名映射(模拟)。
|
String |
getHeaderField(int n)
返回的值
n
th头字段。
|
String |
getHeaderField(String name)
返回命名头字段的值。
|
long |
getHeaderFieldDate(String name, long Default)
返回以日期解析的命名字段的值。
|
int |
getHeaderFieldInt(String name, int Default)
返回被解析为命名字段的值。
|
String |
getHeaderFieldKey(int n)
返回的关键
n
th头字段。
|
long |
getHeaderFieldLong(String name, long Default)
返回被解析为命名字段的值。
|
Map<String,List<String>> |
getHeaderFields()
返回不可修改的标题字段的映射。
|
long |
getIfModifiedSince()
返回此对象的
ifModifiedSince 字段的值。
|
InputStream |
getInputStream()
返回从此打开的连接读取的输入流。
|
long |
getLastModified()
返回
last-modified 标题字段的值。
|
OutputStream |
getOutputStream()
返回写入此连接的输出流。
|
Permission |
getPermission()
返回一个权限对象,该对象表示创建此对象所表示的连接所需的权限。
|
int |
getReadTimeout()
返回读取超时的设置。
|
Map<String,List<String>> |
getRequestProperties()
返回此连接的一般请求属性的不可修改映射。
|
String |
getRequestProperty(String key)
返回此连接的命名的常规请求属性的值。
|
URL |
getURL()
返回此
URLConnection 的
URL 字段的值。
|
boolean |
getUseCaches()
返回此
URLConnection 的
useCaches 字段的值。
|
static String |
guessContentTypeFromName(String fname)
根据URL的指定“文件”组件,尝试确定对象的内容类型。
|
static String |
guessContentTypeFromStream(InputStream is)
根据输入流开头的字符,尝试确定输入流的类型。
|
void |
setAllowUserInteraction(boolean allowuserinteraction)
设置这个
URLConnection 的
allowUserInteraction 字段的值。
|
void |
setConnectTimeout(int timeout)
设置打开与此URLConnection引用的资源的通信链接时使用的指定超时值(以毫秒为单位)。
|
static void |
setContentHandlerFactory(ContentHandlerFactory fac)
设置应用
ContentHandlerFactory 的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)
设置的值
doInput 领域本
URLConnection 指定值。
|
void |
setDoOutput(boolean dooutput)
设置的值
doOutput 领域本
URLConnection 指定值。
|
static void |
setFileNameMap(FileNameMap map)
设置FileNameMap。
|
void |
setIfModifiedSince(long ifmodifiedsince)
设置的值
ifModifiedSince 这个领域
URLConnection 到指定值。
|
void |
setReadTimeout(int timeout)
将读取超时设置为指定的超时时间,以毫秒为单位。
|
void |
setRequestProperty(String key, String value)
设置一般请求属性。
|
void |
setUseCaches(boolean usecaches)
设置的值
useCaches 这个领域
URLConnection 到指定值。
|
String |
toString()
返回
String 此URL连接的表示。
|
protected URL url
该字段的值可以通过getURL
方法访问。
该变量的默认值是URLConnection
构造函数中的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
方法中参数的值。
protected boolean useCaches
true
,协议被允许使用缓存,只要它可以。
如果false
,协议必须始终尝试获取对象的新副本。
该字段由setUseCaches
方法设置。 其值由getUseCaches
方法返回。
其默认值是上次调用setDefaultUseCaches
方法中给出的值。
protected long ifModifiedSince
非零值给出了1970年1月1日GMT之后的毫秒数。 该对象只有在最近被修改的时间才被提取。
该变量由setIfModifiedSince
方法设置。 它的值由getIfModifiedSince
返回。
该字段的默认值为0
,表示必须始终发生提取。
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
如果connect
已经打开( connected
字段的值为true
)调用了true
,则会忽略该调用。
URLConnection对象经历两个阶段:首先创建它们,然后它们被连接。 在创建之后,在连接之前,可以指定各种选项(例如doInput和UseCaches)。 连接后,尝试设置它们是一个错误。 依赖于连接的操作(如getContentLength)将在必要时隐式执行连接。
SocketTimeoutException
- 如果超时连接可以建立之前超时
IOException
- 如果在打开连接时发生I / O错误。
connected
,
getConnectTimeout()
,
setConnectTimeout(int)
public void setConnectTimeout(int timeout)
这种方法的一些非标准实现可能会忽略指定的超时。 要查看连接超时设置,请调用getConnectTimeout()。
timeout
- 一个
int
,以
int
为单位指定连接超时值
IllegalArgumentException
- 如果超时参数为负
getConnectTimeout()
,
connect()
public int getConnectTimeout()
0返回意味着该选项被禁用(即无限超时)。
int
,表示连接超时值(以毫秒为单位)
setConnectTimeout(int)
,
connect()
public void setReadTimeout(int timeout)
此方法的一些非标准实现忽略指定的超时。 要查看读取超时集,请调用getReadTimeout()。
timeout
- 一个
int
,指定要以
int
为单位的超时值
IllegalArgumentException
- 如果timeout参数为负
getReadTimeout()
,
InputStream.read()
public int getReadTimeout()
int
,以
int
为单位表示读取超时值
setReadTimeout(int)
,
InputStream.read()
public int getContentLength()
content-length
标题字段的值。
注意 : getContentLengthLong()
应优先于此方法,因为它返回一个long
,因此更便于携带。
-1
如果内容长度未知,或者如果内容长度大于Integer.MAX_VALUE。
public long getContentLengthLong()
content-length
标题字段的值为long。
-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日GMT以来的毫秒数。
getHeaderField(java.lang.String)
public long getLastModified()
last-modified
标题字段的值。
结果是自1970年1月1日GMT以来的毫秒数。
URLConnection
的资源的上次修改日期,如果未知,则为0。
getHeaderField(java.lang.String)
public String getHeaderField(String name)
如果对可能不同的值多次设置相同标题的连接进行调用,则只返回最后一个值。
name
- 标题字段的名称。
null
。
public Map<String,List<String>> getHeaderFields()
public int getHeaderFieldInt(String name, int Default)
存在这种形式的getHeaderField
,因为某些连接类型(例如, http-ng
)具有预分析头。 该连接类型的类可以覆盖此方法并使解析短路。
name
- 标题字段的名称。
Default
- 默认值。
Default
值。
public long getHeaderFieldLong(String name, long Default)
存在这种形式的getHeaderField
,因为某些连接类型(例如, http-ng
)具有预分析头。 该连接类型的类可以覆盖此方法并使解析短路。
name
- 标题字段的名称。
Default
- 默认值。
Default
值。
public long getHeaderFieldDate(String name, long Default)
存在这种形式的getHeaderField
,因为某些连接类型(例如, http-ng
)具有预分析头。 该连接类型的类可以覆盖此方法并使解析短路。
name
- 标题字段的名称。
Default
- 默认值。
Default
参数的值。
public String getHeaderFieldKey(int n)
n
th头字段。
如果少于n+1
字段,则返回null
。
n
- 一个索引,其中
n>=0
n
th头字段,或
null
如果有不是较少
n+1
字段。
public String getHeaderField(int n)
n
- 一个索引,其中
n>=0
n
th头字段或
null
如果存在少于
n+1
字段
getHeaderFieldKey(int)
public Object getContent() throws IOException
该方法首先通过调用getContentType
方法来确定对象的内容类型。 如果这是应用程序第一次看到特定内容类型,则会创建该内容类型的内容处理程序:
setContentHandlerFactory
方法设置了一个内容处理程序工厂实例,则createContentHandler
该实例的createContentHandler
方法作为参数; 结果是该内容类型的内容处理程序。 createContentHandler
方法返回null
,则应用程序加载名为
其中< contentType >是通过获取内容类型的字符串,用sun.net.www.content.<contentType>
period
('。')替换所有斜杠字符,以及所有其他非字母数字字符与下划线字符' _
'。 字母数字字符具体是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(类[] classes) throws IOException
classes
- 指示所请求类型的
类
数组
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所需的权限的权限。
例如, URLConnection
file: URL的file:
将返回一个java.io.FilePermission
对象。
返回的权限可能取决于连接的状态。 例如,连接前的许可可能与连接后的许可不同。 例如,HTTP服务器(如foo.com)可能将连接重定向到不同的主机,例如bar.com。 连接之前连接权限将代表连接到foo.com所需的权限,连接后返回的权限将是bar.com。
权限通常用于两个目的:保护通过URLConnections获取的对象的缓存,并检查收件人了解特定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
此URL连接的表示。
public void setDoInput(boolean doinput)
doInput
领域本URLConnection
指定值。
URL连接可用于输入和/或输出。 如果您打算使用URL连接进行输入,请将DoInput标志设置为true,否则返回false。 默认值为true。
doinput
- 新值。
IllegalStateException
- 如果已经连接
doInput
,
getDoInput()
public boolean getDoInput()
URLConnection
的
doInput
标志的值。
URLConnection
的
doInput
标志。
setDoInput(boolean)
public void setDoOutput(boolean dooutput)
doOutput
领域本URLConnection
指定值。
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
字段的默认值。
默认是“粘性”,是所有URLConnections的静态状态的一部分。 此标志适用于下一个,以及创建的所有以下URLConnections。
allowUserInteraction
字段。
setDefaultAllowUserInteraction(boolean)
public void setUseCaches(boolean usecaches)
useCaches
这个领域URLConnection
到指定值。
一些协议执行缓存文档。 偶尔,重要的是能够“通过”并忽略高速缓存(例如浏览器中的“重新加载”按钮)。 如果连接上的UseCaches标志为true,则允许连接使用任何可以缓存的缓存。 如果是false,缓存将被忽略。 默认值来自DefaultUseCaches,默认值为true。
usecaches
-一个
boolean
指示是否允许缓存
IllegalStateException
- 如果已经连接
getUseCaches()
public boolean getUseCaches()
URLConnection
的
useCaches
字段的值。
URLConnection
的
useCaches
字段。
setUseCaches(boolean)
public void setIfModifiedSince(long ifmodifiedsince)
ifModifiedSince
这个领域
URLConnection
到指定值。
ifmodifiedsince
- 新值。
IllegalStateException
- 如果已经连接
getIfModifiedSince()
public long getIfModifiedSince()
ifModifiedSince
字段的值。
ifModifiedSince
字段。
setIfModifiedSince(long)
public boolean getDefaultUseCaches()
URLConnection
的useCaches
标志。
默认是“粘性”,是所有URLConnections的静态状态的一部分。 此标志适用于下一个,以及创建的所有以下URLConnections。
URLConnection
的
useCaches
标志。
setDefaultUseCaches(boolean)
public void setDefaultUseCaches(boolean defaultusecaches)
useCaches
字段的默认值设置为指定值。
defaultusecaches
- 新的价值。
getDefaultUseCaches()
public void setRequestProperty(String key, String value)
注意:HTTP需要所有请求属性,它们可以合法地使用相同键的多个实例来使用逗号分隔的列表语法,这样可以将多个属性附加到单个属性中。
key
- 请求已知的关键字(例如,“
Accept
”)。
value
-
value
的值。
IllegalStateException
- 如果已经连接
NullPointerException
- 如果键是
null
getRequestProperty(java.lang.String)
public void addRequestProperty(String key, String value)
key
- 请求已知的关键字(例如,“
Accept
”)。
value
-
value
的值。
IllegalStateException
- 如果已连接
NullPointerException
- 如果键为空
getRequestProperties()
public String getRequestProperty(String key)
key
- 请求已知的关键字(例如,“接受”)。
IllegalStateException
- 如果已经连接
setRequestProperty(java.lang.String, java.lang.String)
public Map<String,List<String>> getRequestProperties()
IllegalStateException
- 如果已经连接
@Deprecated public static void setDefaultRequestProperty(String key, String value)
URLConnection
时,将使用这些属性进行初始化。
key
- 请求已知的关键字(例如,“
Accept
”)。
value
- 与密钥相关
value
的值。
setRequestProperty(java.lang.String,java.lang.String)
,
getDefaultRequestProperty(java.lang.String)
@Deprecated public static String getDefaultRequestProperty(String key)
key
- 请求已知的关键字(例如,“接受”)。
getRequestProperty(java.lang.String)
,
setDefaultRequestProperty(java.lang.String, java.lang.String)
public static void setContentHandlerFactory(ContentHandlerFactory fac)
ContentHandlerFactory
的ContentHandlerFactory。
应用程序最多可以调用一次。
ContentHandlerFactory
实例用于从内容类型构造内容处理程序
如果有安全管理员,则该方法首先调用安全管理员的checkSetFactory
方法,以确保允许操作。 这可能会导致SecurityException。
fac
- 所需工厂。
Error
- 如果工厂已经定义。
SecurityException
- 如果安全管理器存在,并且其
checkSetFactory
方法不允许操作。
ContentHandlerFactory
, getContent()
, SecurityManager.checkSetFactory()
public static String guessContentTypeFromName(String fname)
getContentType
方法的getContentType
使用的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()