java.net.HttpURLConnection
是一个抽象类,它表示特定于 HTTP 的 URL 连接。这个类的实例可以用来从引用的资源中读取或写入。
例如:
-
如果你连接到一个协议为 HTTP 的 URL,
URL.openConnection()
方法会返回一个 HttpURLConnection
对象。
创建一个连接到 URL 的步骤
以下是从 URL 创建连接并开始处理的步骤:
-
调用
URL.openConnection()
方法来获取一个基于 HTTP 的 URL 的 HttpURLConnection
对象。
-
使用连接对象的各种 setter 方法根据需要更新设置参数和通用请求属性。
-
使用连接对象的
connect()
方法创建到远程对象的连接。
-
一旦远程对象可用,就可以访问该对象的内容/头部信息。
HttpURLConnection
类声明
public abstract class HttpURLConnection
extends URLConnection
HttpURLConnection
类字段
一、HttpURLConnection
类字段及其描述
序号 |
字段 |
描述 |
1 |
protected int chunkLength |
当使用块编码流模式进行输出时的块长度。 |
2 |
protected int fixedContentLength |
当使用固定长度流模式时的固定内容长度。 |
3 |
protected long fixedContentLengthLong |
当使用固定长度流模式时的固定内容长度。 |
4 |
static int HTTP_ACCEPTED |
HTTP 状态码 202:已接受。 |
5 |
static int HTTP_BAD_GATEWAY |
HTTP 状态码 502:错误网关。 |
6 |
static int HTTP_BAD_METHOD |
HTTP 状态码 405:方法不允许。 |
7 |
static int HTTP_BAD_REQUEST |
HTTP 状态码 400:错误请求。 |
8 |
static int HTTP_CLIENT_TIMEOUT |
HTTP 状态码 408:请求超时。 |
9 |
static int HTTP_CONFLICT |
HTTP 状态码 409:冲突。 |
10 |
static int HTTP_CREATED |
HTTP 状态码 201:已创建。 |
11 |
static int HTTP_ENTITY_TOO_LARGE |
HTTP 状态码 413:请求实体过大。 |
12 |
static int HTTP_FORBIDDEN |
HTTP 状态码 403:禁止。 |
13 |
static int HTTP_GATEWAY_TIMEOUT |
HTTP 状态码 504:网关超时。 |
14 |
static int HTTP_GONE |
HTTP 状态码 410:已消失。 |
15 |
static int HTTP_INTERNAL_ERROR |
HTTP 状态码 500:内部服务器错误。 |
16 |
static int HTTP_LENGTH_REQUIRED |
HTTP 状态码 411:需要长度。 |
17 |
static int HTTP_MOVED_PERM |
HTTP 状态码 301:永久移动。 |
18 |
static int HTTP_MOVED_TEMP |
HTTP 状态码 302:临时重定向。 |
19 |
static int HTTP_MULT_CHOICE |
HTTP 状态码 300:多重选择。 |
20 |
static int HTTP_NO_CONTENT |
HTTP 状态码 204:无内容。 |
21 |
static int HTTP_NOT_ACCEPTABLE |
HTTP 状态码 406:不可接受。 |
22 |
static int HTTP_NOT_AUTHORITATIVE |
HTTP 状态码 203:非权威信息。 |
23 |
static int HTTP_NOT_FOUND |
HTTP 状态码 404:未找到。 |
24 |
static int HTTP_NOT_IMPLEMENTED |
HTTP 状态码 501:未实现。 |
25 |
static int HTTP_NOT_MODIFIED |
HTTP 状态码 304:未修改。 |
26 |
static int HTTP_OK |
HTTP 状态码 200:成功。 |
27 |
static int HTTP_PARTIAL |
HTTP 状态码 206:部分内容。 |
28 |
static int HTTP_PAYMENT_REQUIRED |
HTTP 状态码 402:需要支付。 |
29 |
static int HTTP_PRECON_FAILED |
HTTP 状态码 412:预条件失败。 |
30 |
static int HTTP_PROXY_AUTH |
HTTP 状态码 407:代理认证所需。 |
31 |
static int HTTP_REQ_TOO_LONG |
HTTP 状态码 414:请求 URI 太长。 |
32 |
static int HTTP_RESET |
HTTP 状态码 205:重置内容。 |
33 |
static int HTTP_SEE_OTHER |
HTTP 状态码 303:查看其他。 |
34 |
static int HTTP_UNAUTHORIZED |
HTTP 状态码 401:未经授权。 |
35 |
static int HTTP_UNAVAILABLE |
HTTP 状态码 503:服务不可用。 |
36 |
static int HTTP_UNSUPPORTED_TYPE |
HTTP 状态码 415:不支持的媒体类型。 |
37 |
static int HTTP_USE_PROXY |
HTTP 状态码 305:使用代理。 |
38 |
static int HTTP_VERSION |
HTTP 状态码 505:不支持的 HTTP 版本。 |
39 |
protected boolean instanceFollowRedirects |
如果为 true,则协议会自动跟随重定向。 |
40 |
protected String method |
HTTP 方法(GET、POST、PUT 等)。 |
41 |
protected int responseCode |
一个整数,代表三位数的 HTTP 状态码。 |
42 |
protected String responseMessage |
HTTP 响应消息。 |
HttpURLConnection
类方法
HttpURLConnection
类包含许多方法来设置或确定有关连接的信息,包括但不限于以下:
二、HttpURLConnection
类方法及其描述
序号 |
方法 |
描述 |
1 |
abstract void disconnect() |
表明在不久的将来不太可能再向服务器发出其他请求。 |
2 |
InputStream getErrorStream() |
如果连接失败但服务器仍然发送了有用的数据,则返回错误流。 |
3 |
static boolean getFollowRedirects() |
返回一个布尔值,指示是否应自动跟随 HTTP 重定向(3xx)。 |
4 |
String getHeaderField(int n) |
返回第 n 个头部字段的值。 |
5 |
String getHeaderFieldKey(int n) |
返回第 n 个头部字段的键。 |
6 |
boolean getInstanceFollowRedirects() |
返回此 HttpURLConnection 的 instanceFollowRedirects 字段的值。 |
7 |
Permission getPermission() |
返回一个 SocketPermission 对象,表示连接到目标主机和端口所需的权限。 |
8 |
String getRequestMethod() |
获取请求方法。 |
9 |
int getResponseCode() |
从 HTTP 响应消息中获取状态码。 |
10 |
String getResponseMessage() |
获取服务器返回的 HTTP 响应消息(如果有)。 |
11 |
void setAuthenticator(Authenticator auth) |
提供一个 Authenticator ,当通过 HTTP 协议请求认证时使用。 |
12 |
void setChunkedStreamingMode(int chunklen) |
此方法用于启用流式传输 HTTP 请求正文,无需内部缓冲,当内容长度未知时使用。 |
13 |
void setFixedLengthStreamingMode(int contentLength) |
此方法用于启用流式传输 HTTP 请求正文,无需内部缓冲,当内容长度已知时使用。 |
14 |
void setFixedLengthStreamingMode(long contentLength) |
此方法用于启用流式传输 HTTP 请求正文,无需内部缓冲,当内容长度已知时使用。 |
15 |
static void setFollowRedirects(boolean set) |
设置此类是否应自动跟随 HTTP 重定向(带有 3xx 状态码的请求)。 |
16 |
void setInstanceFollowRedirects(boolean followRedirects) |
设置此 HttpURLConnection 实例是否应自动跟随 HTTP 重定向(带有 3xx 状态码的请求)。 |
17 |
void setRequestMethod(String method) |
设置 URL 请求的方法,可以是 GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE 之一,具体取决于协议限制。 |
18 |
abstract boolean usingProxy() |
表明连接是否通过代理。 |
HttpURLConnection
类扩展
此类扩展了以下类:
示例代码
下面的 HttpURLConnection
程序连接到从命令行输入的 URL。
如果 URL 表示的是 HTTP 资源,连接会被转换为 HttpURLConnection
,并且资源中的数据将逐行读取。
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class HttpUrlConnectionDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.tutorialspoint.com");
URLConnection urlConnection = url.openConnection();
HttpURLConnection connection = null;
if(urlConnection instanceof HttpURLConnection) {
connection = (HttpURLConnection) urlConnection;
} else {
System.out.println("Please enter an HTTP URL.");
return;
}
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String urlString = "";
String current;
while((current = in.readLine()) != null) {
urlString += current;
}
System.out.println(urlString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
此程序的一个样本运行结果如下:
输出
$ java HttpUrlConnectionDemo
.....a complete HTML content of home page of tutorialspoint.com.....