Java 简明教程
Java - HttpURLConnection Class
Java HttpURLConnection Class
java.net.HttpURLConnection 是一个抽象类,它表示特定于 HTTP 的 URL 连接。此类的实例可同时用于读取和写入 URL 引用调用的资源。
例如 -
Steps to make a connection to a URL
以下是建立与 URL 的连接并开始处理的步骤:
-
调用 URL.openConnection() method 以获取基于 HTTP 的 URL 的 HttpURLConnection 对象。
-
根据需要使用 connection 对象的各种 setter 方法来更新设置参数和一般请求属性。
-
使用 connection 对象的 connect() 方法来创建到远程对象的连接。
-
在远程对象可用后,访问远程对象的正文/标头。
HttpURLConnection Class Fields
Sr.No. |
Field & Description |
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 状态代码的 int。 |
42 |
protected String responseMessage HTTP 响应消息。 |
HttpURLConnection Class Methods
HttpURLConnection 类具有多种用于设置或确定连接信息的函数,包括以下内容 −
Sr.No. |
Method & Description |
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 的实例 FollowRedirects 字段的值。 |
7 |
Permission getPermission() 返回表示连接到目标主机和端口所需的权限的 SocketPermission 对象。 |
8 |
String getRequestMethod() 获取请求方法。 |
9 |
int getResponseCode() 从 HTTP 响应消息获取状态代码。 |
10 |
String getResponseMessage() 获取 HTTP 响应消息(如果有)以及服务器响应代码一同返回。 |
11 |
void setAuthenticator(Authenticator auth) 当通过 HTTP 协议为该 HttpURLConnection 请求身份验证时,提供要使用的身份验证器。 |
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() 指示该连接是否通过代理进行。 |
Example of Java HttpURLConnection Class
以下 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();
}
}
}
此程序的示例运行将产生以下结果: