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.....