提供HTTP数据请求能力。应用可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻
导入模块
import ohos.net.http.*
完整示例
import ohos.net.http.*
import ohos.base.*
import std.collection.*
// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = createHttp()
// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
httpRequest.onHeadersReceive({header: HashMap<String, String> =>
AppLog.info("header: ${header}")
})
let option = HttpRequestOptions(
method: RequestMethod.POST, // 可选,默认为http.RequestMethod.GET
// 当使用POST请求时此字段用于传递内容
extraData: HttpData.STRING_DATA("data to send"),
expectDataType: HttpDataType.STRING, // 可选,指定返回数据的类型
usingCache: true, // 可选,默认为true
priority: 1, // 可选,默认为1
// 开发者根据自身业务需要添加header字段
header: HashMap<String, String>([("content-type", "application/json")]),
readTimeout: 60000, // 可选,默认为60000ms
connectTimeout: 60000, // 可选,默认为60000ms
usingProtocol: HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定
usingProxy: UsingProxy.USE_DEFAULT, //可选,默认不使用网络代理,自API 10开始支持该属性
caPath: "/path/to/cacert.pem", // 可选,默认使用系统预设CA证书,自API 10开始支持该属性
clientCert: ClientCert(
"/path/to/client.pem", // 默认不使用客户端证书
"/path/to/client.key", // 若证书包含Key信息,传入空字符串
certType: CertType.PEM, // 可选,默认使用PEM
keyPassword: "passwordToKey" // 可选,输入key文件的密码
),
multiFormDataList: [ // 可选,仅当Header中,'content-Type'为'multipart/form-data'时生效
MultiFormData (
"Part1", // 数据名
"text/plain", // 数据类型
data: STRING_DATA("Example data"), // 可选,数据内容
remoteFileName: "example.txt" // 可选
),
MultiFormData (
"Part2", // 数据名
"text/plain", // 数据类型
filePath: "/data/app/el2/100/base/com.example.myapplication/haps/entry/files/fileName.txt", // 可选,传入文件路径
remoteFileName: "fileName.txt" // 可选
)
]
)
httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
"http://www.example.com", { err, resp =>
if (let Some(e) <- err) {
Hilog.error(0, "test","exception: ${e.message}")
throw e
}
if (let Some(r) <- resp) {
Hilog.error(0, "test", "${r}")
} else {
Hilog.error(0, "test", "resp is none")
}
httpRequest.destroy()
}, options: option)
func createHttp()
public func createHttp(): HttpRequest
创建一个HTTP请求,请求对象功能包括发起请求、中断请求、订阅/取消订阅HTTP Response Header事件。每一个HttpRequest对象对应一个HTTP请求。如需发起多个HTTP请求,须为每个HTTP请求创建对应HttpRequest对象。
说明
当该请求使用完毕时,须调用destroy方法主动销毁HttpRequest对象。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
HttpRequest | 返回一个HttpRequest对象,里面包括request、requestInStream、destroy、on和off方法。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
class HttpRequest
public class HttpRequest {}
HTTP请求任务。在调用HttpRequest的方法前,需要先通过createHttp()创建一个任务。
func request(String, (?BusinessException, ?HttpResponse) -> Unit, ?HttpRequestOptions)
public func request(url: String, callback: (?BusinessException, ?HttpResponse) -> Unit, options!: ?HttpRequestOptions = None): Unit
根据URL地址,发起HTTP网络请求,在callback回调函数中返回响应。
说明
此接口仅支持数据大小为5MB以内的数据接收。
需要权限:ohos.permission.INTERNET
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
url | String | 是 | 发起网络请求的URL地址。 |
callback | (?BusinessException, ?HttpResponse) -> Unit | 是 | 回调函数。 |
options | ?HttpRequestOptions | 否 | 参考HttpRequestOptions。 |
错误码:
错误码ID | 错误信息 |
401 | Parameter error. |
201 | Permission denied. |
2300001 | Unsupported protocol. |
2300003 | URL using bad/illegal format or missing URL. |
2300005 | Couldn't resolve proxy name. |
2300006 | Couldn't resolve host name. |
2300007 | Couldn't connect to server. |
2300008 | Weird server reply. |
2300009 | Access denied to remote resource. |
2300016 | Error in the HTTP2 framing layer. |
2300018 | Transferred a partial file. |
2300023 | Failed writing received data to disk/application. |
2300025 | Upload failed. |
2300026 | Failed to open/read local data from file/application. |
2300027 | Out of memory. |
2300028 | Timeout was reached. |
2300047 | Number of redirects hit maximum amount. |
2300052 | Server returned nothing (no headers, no data). |
2300055 | Failed sending data to the peer. |
2300056 | Failure when receiving data from the peer. |
2300058 | Problem with the local SSL certificate. |
2300059 | Couldn't use specified SSL cipher. |
2300060 | SSL peer certificate or SSH remote key was not OK. |
2300061 | Unrecognized or bad HTTP Content or Transfer-Encoding. |
2300063 | Maximum file size exceeded. |
2300070 | Disk full or allocation exceeded. |
2300073 | Remote file already exists. |
2300077 | Problem with the SSL CA cert (path? access rights?). |
2300078 | Remote file not found. |
2300094 | An authentication function returned an error. |
2300999 | Unknown Other Error. |
说明
以上错误码的详细介绍参见HTTP错误码。
HTTP接口返回错误码映射关系:2300000 + curl错误码。更多常用错误码,可参考:curl错误码。
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.request("http://www.example.com", {err, resp =>
if (let Some(e) <- err) {
Hilog.error(0, "test","exception: ${e.message}")
}
if (let Some(r) <- resp) {
Hilog.info(0, "test", "resp: ${r}")
} else {
Hilog.error(0, "test", "response is none")
}
})
func destroy()
public func destroy(): Unit
中断请求任务。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.destroy()
func requestInStream(String, (?BusinessException, ?UInt32) -> Unit, ?HttpRequestOptions)
public func requestInStream(url: String, callback: (?BusinessException, ?UInt32) -> Unit, options!: ?HttpRequestOptions = None): Unit
根据URL地址和相关配置项,发起HTTP网络请求并返回流式响应,在callback回调函数中返回响应。
需要权限:ohos.permission.INTERNET
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
url | String | 是 | 发起网络请求的URL地址。 |
callback | (?BusinessException, ?UInt32) -> Unit | 是 | 回调函数。 |
options | ?HttpRequestOptions | 否 | 参考HttpRequestOptions。 |
错误码:
错误码ID | 错误信息 |
401 | Parameter error. |
201 | Permission denied. |
2300001 | Unsupported protocol. |
2300003 | URL using bad/illegal format or missing URL. |
2300005 | Couldn't resolve proxy name. |
2300006 | Couldn't resolve host name. |
2300007 | Couldn't connect to server. |
2300008 | Weird server reply. |
2300009 | Access denied to remote resource. |
2300016 | Error in the HTTP2 framing layer. |
2300018 | Transferred a partial file. |
2300023 | Failed writing received data to disk/application. |
2300025 | Upload failed. |
2300026 | Failed to open/read local data from file/application. |
2300027 | Out of memory. |
2300028 | Timeout was reached. |
2300047 | Number of redirects hit maximum amount. |
2300052 | Server returned nothing (no headers, no data). |
2300055 | Failed sending data to the peer. |
2300056 | Failure when receiving data from the peer. |
2300058 | Problem with the local SSL certificate. |
2300059 | Couldn't use specified SSL cipher. |
2300060 | SSL peer certificate or SSH remote key was not OK. |
2300061 | Unrecognized or bad HTTP Content or Transfer-Encoding. |
2300063 | Maximum file size exceeded. |
2300070 | Disk full or allocation exceeded. |
2300073 | Remote file already exists. |
2300077 | Problem with the SSL CA cert (path? access rights?). |
2300078 | Remote file not found. |
2300094 | An authentication function returned an error. |
2300999 | Unknown Other Error. |
说明
以上错误码的详细介绍参见HTTP错误码。
HTTP接口返回错误码映射关系:2300000 + curl错误码。更多常用错误码,可参考:curl错误码。
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.requestInStream("http://www.example.com", {err, code =>
if (let Some(e) <- err) {
Hilog.error(0, "test","exception: ${e.message}")
}
if (let Some(respCode) <- code) {
Hilog.info(0, "test", "resp: ${respCode}")
} else {
Hilog.error(0, "test", "response is none")
}
})
func onHeadersReceive((HashMap<String, String>) -> Unit)
public func onHeadersReceive(callback: (HashMap<String, String>) -> Unit): Unit
订阅HTTP Response Header事件。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | (HashMap<String, String>) -> Unit | 是 | 回调函数。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onHeadersReceive({ headers =>
AppLog.info("headers: ${headers}")
})
func offHeadersReceive()
public func offHeadersReceive(): Unit
取消订阅HTTP Response Header事件。
说明
清空所有订阅。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onHeadersReceive({ headers =>
AppLog.info("headers: ${headers}")
})
httpRequest.offHeadersReceive()
func onceHeadersReceive((HashMap<String, String>) -> Unit)
public func onceHeadersReceive(callback: (HashMap<String, String>) -> Unit): Unit
订阅HTTP Response Header事件,但是只触发一次。一旦触发之后,此函数注册的订阅器就会被移除。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | (HashMap<String, String>) -> Unit | 是 | 回调函数。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onceHeadersReceive({ headers =>
AppLog.info("headers: ${headers}")
})
func onDataReceive((Array<Byte>) -> Unit)
public func onDataReceive(callback: (Array<Byte>) -> Unit): Unit
订阅HTTP流式响应数据接收事件。
说明
暂不支持订阅HTTP流式数据上传的相关事件。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | (Array<Byte>) -> Unit | 是 | 回调函数。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataReceive({ data =>
AppLog.info("data receive: ${data}")
})
func offDataReceive()
public func offDataReceive(): Unit
取消订阅HTTP流式响应数据接收事件。
说明
清空所有订阅。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataReceive({ data =>
AppLog.info("data receive: ${data}")
})
httpRequest.offDataReceive()
func onDataEnd(() -> Unit)
public func onDataEnd(callback: () -> Unit): Unit
订阅HTTP流式响应数据接收完毕事件。
说明
暂不支持订阅HTTP流式数据上传的相关事件。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | () -> Unit | 是 | 回调函数。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataEnd({ =>
AppLog.info("data end")
})
func offDataEnd()
public func offDataEnd(): Unit
取消订阅HTTP流式响应数据接收完毕事件。
说明
清空所有订阅。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataEnd({ =>
AppLog.info("data end")
})
httpRequest.offDataEnd()
func onDataReceiveProgress((DataReceiveProgressInfo) -> Unit)
public func onDataReceiveProgress(callback: (DataReceiveProgressInfo) -> Unit): Unit
订阅HTTP流式响应数据接收进度事件。
说明
暂不支持订阅HTTP流式数据上传的相关事件。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | (DataReceiveProgressInfo) -> Unit | 是 | 回调函数。返回数据接收进度信息。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataReceiveProgress({ receiveInfo =>
AppLog.info("receive data ${receiveInfo.receiveSize}, total: ${receiveInfo.totalSize}")
})
func offDataReceiveProgress()
public func offDataReceiveProgress(): Unit
取消订阅HTTP流式响应数据接收进度事件。
说明
清空所有订阅。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataReceiveProgress({ receiveInfo =>
AppLog.info("receive data ${receiveInfo.receiveSize}, total: ${receiveInfo.totalSize}")
})
httpRequest.offDataReceiveProgress()
func onDataSendProgress((DataSendProgressInfo) -> Unit)
public func onDataSendProgress(callback: (DataSendProgressInfo) -> Unit): Unit
订阅HTTP网络请求数据发送进度事件。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
callback | (DataSendProgressInfo) -> Unit | 是 | 回调函数。返回数据发送进度信息。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataSendProgress({ sendInfo =>
AppLog.info("send data ${sendInfo.sendSize}, total: ${sendInfo.totalSize}")
})
func offDataSendProgress()
public func offDataSendProgress(): Unit
取消订阅HTTP网络请求数据发送进度事件。
说明
清空所有订阅。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.onDataSendProgress({ sendInfo =>
AppLog.info("send data ${sendInfo.sendSize}, total: ${sendInfo.totalSize}")
})
httpRequest.offDataSendProgress()
class HttpRequestOptions
public class HttpRequestOptions {
public HttpRequestOptions(
public let method!: RequestMethod = RequestMethod.GET,
public let extraData!: ?HttpData = None,
public let expectDataType!: ?HttpDataType = None,
public let usingCache!: Bool = true,
public let priority!: UInt32 = 1,
public let header!: ?HashMap<String, String> = None,
public let readTimeout!: UInt32 = 60000,
public let connectTimeout!: UInt32 = 60000,
public let usingProtocol!: ?HttpProtocol = None,
public let usingProxy!: UsingProxy = NOT_USE,
public let caPath!: ?String = None,
public let resumeFrom!: ?Int64 = None,
public let resumeTo!: ?Int64 = None,
public let clientCert!: ?ClientCert = None,
public let dnsOverHttps!: ?String = None,
public let dnsServers!: ?Array<String> = None,
public let maxLimit!: UInt32 = 5 * 1024 * 1024,
public let multiFormDataList!: ?Array<MultiFormData> = None
) {}
}
发起请求可选参数的类型和取值范围。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
method | RequestMethod | 否 | 请求方式,默认为GET。 |
extraData | ?HttpData | 否 | 发送请求的额外数据,默认无此字段。 当HTTP请求为POST、PUT等方法时,此字段为HTTP请求的content,以UTF-8编码形式作为请求体。 当'content-Type'为'application/x-www-form-urlencoded'时,请求提交的信息主体数据应在key和value进行URL转码后按照键值对"key1=value1&key2=value2&key3=value3"的方式进行编码,该字段对应的类型通常为String; 当'content-Type'为'text/xml'时,该字段对应的类型通常为String; 当'content-Type'为'application/json'时,该字段对应的类型通常为Object; 当'content-Type'为'application/octet-stream'时,该字段对应的类型通常为ArrayBuffer; 当'content-Type'为'multipart/form-data'且需上传的字段为文件时,该字段对应的类型通常为ArrayBuffer。 当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT等方法时,此字段为HTTP请求参数的补充。开发者需传入Encode编码后的string类型参数,Object类型的参数无需预编码,参数内容会拼接到URL中进行发送; ArrayBuffer类型的参数不会做拼接处理。 以上信息仅供参考,并可能根据具体情况有所不同。 |
expectDataType | ?HttpDataType | 否 | 指定返回数据的类型,默认无此字段。如果设置了此参数,系统将优先返回指定的类型。 |
usingCache | Bool | 否 | 是否使用缓存,默认为true,请求时优先读取缓存。 缓存跟随当前进程生效。新缓存会替换旧缓存。 |
priority | UInt32 | 否 | 优先级,范围[1,1000],默认是1。若传参超出范围则使用默认值1。 |
header | ?HashMap<String, String> | 否 | HTTP请求头字段。默认{'content-Type': 'application/json'}。 |
readTimeout | UInt32 | 否 | 读取超时时间。单位为毫秒(ms),默认为60000ms。 设置为0表示不会出现超时情况。 |
connectTimeout | UInt32 | 否 | 连接超时时间。单位为毫秒(ms),默认为60000ms。 |
usingProtocol | ?HttpProtocol | 否 | 使用协议。默认值由系统自动指定。 |
usingProxy | UsingProxy | 否 | 是否使用HTTP代理,默认为NOT_USE,不使用代理。 当usingProxy为USE_DEFAULT时,使用默认网络代理。 当usingProxy为USE_SPECIFIED类型时,使用指定网络代理。 |
caPath | ?String | 否 | 如果设置了此参数,系统将使用用户指定路径的CA证书,(开发者需保证该路径下CA证书的可访问性),否则将使用系统预设CA证书,系统预设CA证书位置:/etc/ssl/certs/cacert.pem。证书路径为沙箱映射路径(开发者可通过Global.getContext().filesDir获取应用沙箱路径)。目前仅支持后缀名为.pem的文本格式证书。 |
resumeFrom | ?Int64 | 否 | 用于设置上传或下载起始位置。HTTP标准(RFC 7233第3.1节)允许服务器忽略范围请求。 使用HTTP PUT时设置此参数,可能出现未知问题。 取值范围是:1~4294967296(4GB),超出范围则不生效。无默认值。 |
resumeTo | ?Int64 | 否 | 用于设置上传或下载结束位置。HTTP标准(RFC 7233第3.1节)允许服务器忽略范围请求。 使用HTTP PUT时设置此参数,可能出现未知问题。 取值范围是:1~4294967296(4GB),超出范围则不生效。无默认值。 |
clientCert | ?ClientCert | 否 | 支持传输客户端证书。 |
dnsOverHttps | ?String | 否 | 设置使用HTTPS协议的服务器进行DNS解析。 参数必须以以下格式进行URL编码:"https:// host:port/path"。 |
dnsServers | ?Array<String> | 否 | 设置指定的DNS服务器进行DNS解析。 可以设置多个DNS解析服务器,最多3个服务器。如果有3个以上,只取前3个。 服务器必须是IPV4或者IPV6地址。 |
maxLimit | UInt32 | 否 | 响应消息的最大字节限制,默认值为5MB,以字节为单位。最大值为10MB,以字节为单位。 |
multiFormDataList | ?Array<MultiFormData> | 否 | 当'content-Type'为'multipart/form-data'时,则上传该字段定义的数据字段表单列表。 |
enum RequestMethod
public enum RequestMethod {
OPTIONS |
GET |
HEAD |
POST |
PUT |
DELETE |
TRACE |
CONNECT
}
HTTP请求方法。
系统能力:SystemCapability.Communication.NetStack
名称 | 值 | 说明 |
OPTIONS | "OPTIONS" | HTTP请求OPTIONS。 |
GET | "GET" | HTTP请求GET。 |
HEAD | "HEAD" | HTTP请求HEAD。 |
POST | "POST" | HTTP请求POST。 |
PUT | "PUT" | HTTP请求PUT。 |
DELETE | "DELETE" | HTTP请求DELETE。 |
TRACE | "TRACE" | HTTP请求TRACE。 |
CONNECT | "CONNECT" | HTTP请求CONNECT。 |
func getValue()
public func getValue(): String
获取RequestMethod枚举对应的字符串。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
String | 返回RequestMethod枚举对应的字符串。 |
示例:
import ohos.net.http.*
let getMethod = RequestMethod.GET.getvalue()
enum ResponseCode
public enum ResponseCode {
OK
| CREATED
| ACCEPTED
| NOT_AUTHORITATIVE
| NO_CONTENT
| RESET
| PARTIAL
| MULT_CHOICE
| MOVED_PERM
| MOVED_TEMP
| SEE_OTHER
| NOT_MODIFIED
| USE_PROXY
| BAD_REQUEST
| UNAUTHORIZED
| PAYMENT_REQUIRED
| FORBIDDEN
| NOT_FOUND
| BAD_METHOD
| NOT_ACCEPTABLE
| PROXY_AUTH
| CLIENT_TIMEOUT
| CONFLICT
| GONE
| LENGTH_REQUIRED
| PRECON_FAILED
| ENTITY_TOO_LARGE
| REQ_TOO_LONG
| UNSUPPORTED_TYPE
| REQUESTED_RANGE_NOT_SATISFIABLE
| EXPECTATION_FAILED
| TEAPOT
| MISDIRECTED_REQUEST
| UNPROCESSABLE_ENTITY
| LOCKED
| FAILED_DEPENDENCY
| TOO_EARLY
| UPGRADE_REQUIRED
| PRECONDITION_REQUIRED
| TOO_MANY_REQUESTS
| REQUEST_HEADER_FIELDS_TOO_LARGE
| UNAVAILABLE_FOR_LEGAL_REASONS
| INTERNAL_ERROR
| NOT_IMPLEMENTED
| BAD_GATEWAY
| UNAVAILABLE
| GATEWAY_TIMEOUT
| VERSION
| VARIANT_ALSO_NEGOTIATES
| INSUFFICIENT_STORAGE
| LOOP_DETECTED
| NOT_EXTENDED
| NETWORK_AUTHENTICATION_REQUIRED
}
发起请求返回的响应码。
系统能力:SystemCapability.Communication.NetStack
名称 | 值 | 说明 |
OK | 200 | 请求成功。一般用于GET与POST请求。 |
CREATED | 201 | 已创建。成功请求并创建了新的资源。 |
ACCEPTED | 202 | 已接受。已经接受请求,但未处理完成。 |
NOT_AUTHORITATIVE | 203 | 非授权信息。请求成功。 |
NO_CONTENT | 204 | 无内容。服务器成功处理,但未返回内容。 |
RESET | 205 | 重置内容。 |
PARTIAL | 206 | 部分内容。服务器成功处理了部分GET请求。 |
MULT_CHOICE | 300 | 多种选择。 |
MOVED_PERM | 301 | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。 |
MOVED_TEMP | 302 | 临时移动。 |
SEE_OTHER | 303 | 查看其它地址。 |
NOT_MODIFIED | 304 | 未修改。 |
USE_PROXY | 305 | 使用代理。 |
BAD_REQUEST | 400 | 客户端请求的语法错误,服务器无法理解。 |
UNAUTHORIZED | 401 | 请求要求用户的身份认证。 |
PAYMENT_REQUIRED | 402 | 保留,将来使用。 |
FORBIDDEN | 403 | 服务器理解请求客户端的请求,但是拒绝执行此请求。 |
NOT_FOUND | 404 | 服务器无法根据客户端的请求找到资源(网页)。 |
BAD_METHOD | 405 | 客户端请求中的方法被禁止。 |
NOT_ACCEPTABLE | 406 | 服务器无法根据客户端请求的内容特性完成请求。 |
PROXY_AUTH | 407 | 请求要求代理的身份认证。 |
CLIENT_TIMEOUT | 408 | 请求时间过长,超时。 |
CONFLICT | 409 | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突。 |
GONE | 410 | 客户端请求的资源已经不存在。 |
LENGTH_REQUIRED | 411 | 服务器无法处理客户端发送的不带Content-Length的请求信息。 |
PRECON_FAILED | 412 | 客户端请求信息的先决条件错误。 |
ENTITY_TOO_LARGE | 413 | 由于请求的实体过大,服务器无法处理,因此拒绝请求。 |
REQ_TOO_LONG | 414 | 请求的URI过长(URI通常为网址),服务器无法处理。 |
UNSUPPORTED_TYPE | 415 | 服务器无法处理请求的格式。 |
REQUESTED_RANGE_NOT_SATISFIABLE | 416 | 无法满足请求中Range标头字段指定的范围。该范围可能超出了目标URI数据的大小。 |
EXPECTATION_FAILED | 417 | 此响应代码表示服务器无法满足Expect请求标头字段所指示的期望。 |
TEAPOT | 418 | 服务端拒绝用茶壶煮咖啡。 |
MISDIRECTED_REQUEST | 421 | 请求被定向到无法生成响应的服务器。这可以由未配置为针对请求 URI 中包含的方案和权限组合生成响应的服务器发送。 |
UNPROCESSABLE_ENTITY | 422 | 请求格式正确,但由于语义错误而无法遵循。 |
LOCKED | 423 | 正在访问的资源已锁定。 |
FAILED_DEPENDENCY | 424 | 由于前一个请求失败,请求失败。 |
TOO_EARLY | 425 | 表示服务器不愿意冒险处理可能被重播的请求。 |
UPGRADE_REQUIRED | 426 | 服务器拒绝使用当前协议执行请求,但在客户端升级到其他协议后可能愿意这样做。 服务端发送带有Upgrade(en-US)字段的426响应 来表明它所需的协议。 |
PRECONDITION_REQUIRED | 428 | 源服务器要求请求是有条件的。此响应旨在防止'丢失更新'问题,即当第三方修改服务器上的状态时,客户端GET获取资源的状态,对其进行修改并将其PUT放回服务器,从而导致冲突。 |
TOO_MANY_REQUESTS | 429 | 用户在给定的时间内发送了太多请求("限制请求速率"。) |
REQUEST_HEADER_FIELDS_TOO_LARGE | 431 | 服务器不愿意处理请求,因为其头字段太大。在减小请求头字段的大小后,可以重新提交请求 |
UNAVAILABLE_FOR_LEGAL_REASONS | 451 | 用户代理请求了无法合法提供的资源,例如政府审查的网页。 |
INTERNAL_ERROR | 500 | 服务器内部错误,无法完成请求。 |
NOT_IMPLEMENTED | 501 | 服务器不支持请求的功能,无法完成请求。 |
BAD_GATEWAY | 502 | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 |
UNAVAILABLE | 503 | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。 |
GATEWAY_TIMEOUT | 504 | 充当网关或代理的服务器,未及时从远端服务器获取请求。 |
VERSION | 505 | 服务器请求的HTTP协议的版本。 |
VARIANT_ALSO_NEGOTIATES | 506 | 服务器存在内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当终点。 |
INSUFFICIENT_STORAGE | 507 | 无法在资源上执行该方法,因为服务器无法存储成功完成请求所需的表示。 |
LOOP_DETECTED | 508 | 服务器在处理请求时检测到无限循环。 |
NOT_EXTENDED | 510 | 服务器需要对请求进行进一步扩展才能完成请求。 |
NETWORK_AUTHENTICATION_REQUIRED | 511 | 指示客户端需要进行身份验证才能获得网络访问权限。 |
func getValue()
public func getValue(): UInt32
获取ResponseCode枚举对应的数值。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
UInt32 | 返回ResponseCode枚举对应的数值。 |
示例:
import ohos.net.http.*
let code = ResponseCode.OK.getvalue()
func parse(code: UInt32)
public func parse(code: UInt32): ResponseCode
获取状态码对应的枚举。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
code | UInt32 | 是 | 状态码的数值。 |
返回值:
类型 | 说明 |
UInt32 | 返回状态码数值对应的枚举。 |
示例:
import ohos.net.http.*
let code = ResponseCode.parse(200)
func createHttpResponseCache(UInt32)
public func createHttpResponseCache(cacheSize!: UInt32 = `10 * 1024 * 1024`): HttpResponseCache
创建一个默认的对象来存储HTTP访问请求的响应。
系统能力:SystemCapability.Communication.NetStack
参数:
参数名 | 类型 | 必填 | 说明 |
cacheSize | UInt32 | 否 | 缓存大小最大为10*1024*1024(10MB),默认最大。 |
返回值:
类型 | 说明 |
HttpResponseCache | 返回一个存储HTTP访问请求响应的对象。 |
示例:
import ohos.net.http.*
let httpResponseCache = createHttpResponseCache()
class HttpResponseCache
public class HttpResponseCache {}
存储HTTP访问请求响应的对象。在调用HttpResponseCache的方法前,需要先通过createHttpResponseCache创建一个任务。
func flush()
public func flush(): Unit
将缓存中的数据写入文件系统,以便在下一个HTTP请求中访问所有缓存数据。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
import ohos.base.*
let httpResponseCache = createHttpResponseCache()
try {
httpResponseCache.flush()
} catch (e: BusinessException) {
Hilog.info(0, "", "${e}")
}
func delete()
public func delete(): Unit
禁用缓存并删除其中的数据。
系统能力:SystemCapability.Communication.NetStack
示例:
import ohos.net.http.*
import ohos.base.*
let httpResponseCache = createHttpResponseCache()
try {
httpResponseCache.delete()
} catch (e: BusinessException) {
Hilog.info(0, "", "${e}")
}
class HttpResponse
public class HttpResponse <: ToString {}
request方法回调函数的返回值类型。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
result | HttpData | 是 | HTTP请求根据响应头中content-type类型返回对应的响应格式内容。 |
resultType | HttpDataType | 是 | 返回值类型。 |
responseCode | ResponseCode | 是 | 响应的状态码 |
header | HashMap<String, String> | 是 | 发起HTTP请求返回来的响应头。 |
cookies | String | 是 | 服务器返回的cookies。 |
performanceTiming | PerformanceTiming | 是 | HTTP请求的各个阶段的耗时。 |
func toString()
public func toString(): String
返回字符串形式的HttpResponse。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
String | 返回字符串形式的HttpResponse。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.request("http://www.example.com", {err, resp =>
if (let Some(e) <- err) {
Hilog.error(0, "test","exception: ${e.message}")
}
if (let Some(r) <- resp) {
Hilog.info(0, "test", "resp: ${r.toString()}")
} else {
Hilog.error(0, "test", "response is none")
}
})
class ClientCert
public class ClientCert {
public ClientCert(
public let certPath: String,
public let keyPath: String,
public let certType!: CertType = CertType.PEM,
public let keyPassword!: ?String = None
) {}
}
客户端证书类型。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
certPath | String | 是 | 证书路径。 |
keyPath | String | 是 | 证书秘钥的路径。 |
certType | CertType | 否 | 证书类型,默认是PEM。 |
keyPassword | ?String | 否 | 证书秘钥的密码。 |
class PerformanceTiming
- public class PerformanceTiming <: ToString {}
性能打点数据,单位为毫秒。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
dnsTiming | Float64 | 是 | 从request请求到DNS解析完成耗时。 |
tcpTiming | Float64 | 是 | 从request请求到TCP连接完成耗时。 |
tlsTiming | Float64 | 是 | 从request请求到TLS连接完成耗时。 |
firstSendTiming | Float64 | 是 | 从request请求到开始发送第一个字节的耗时。 |
firstReceiveTiming | Float64 | 是 | 从request请求到接收第一个字节的耗时。 |
totalFinishTiming | Float64 | 是 | 从request请求到完成请求的耗时。 |
redirectTiming | Float64 | 是 | 从request请求到完成所有重定向步骤的耗时。 |
responseHeaderTiming | Float64 | 是 | 从request请求到header解析完成的耗时。 |
responseBodyTiming | Float64 | 是 | 从request请求到body解析完成的耗时。 |
totalTiming | Float64 | 是 | 从request请求回调到应用程序的耗时。 |
func toString()
public func toString(): String
返回字符串形式的PerformanceTiming。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
String | 返回字符串形式的PerformanceTiming。 |
示例:
import ohos.net.http.*
let httpRequest = createHttp()
httpRequest.request("http://www.example.com", {err, resp =>
if (let Some(e) <- err) {
Hilog.error(0, "test","exception: ${e.message}")
}
if (let Some(r) <- resp) {
Hilog.info(0, "test", "resp: ${r.performanceTiming.toString()}")
} else {
Hilog.error(0, "test", "response is none")
}
})
class DataReceiveProgressInfo
public class DataReceiveProgressInfo {}
数据接收信息。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
receiveSize | UInt32 | 是 | 已接收的数据量单位为字节。 |
totalSize | UInt32 | 是 | 总共要接收的数据量单位为字节。 |
class DataSendProgressInfo
public class DataSendProgressInfo {}
数据发送信息。
系统能力:SystemCapability.Communication.NetStack
属性
名称 | 类型 | 必填 | 说明 |
sendSize | UInt32 | 是 | 每次发送的数据量单位为字节。 |
totalSize | UInt32 | 是 | 总共要发送的数据量单位为字节。 |
class MultiFormData
public class MultiFormData {
public MultiFormData (
public let name: String,
public let contentType: String,
public let remoteFileName!: ?String = None,
public let data!: ?HttpData = None,
public let filePath!: ?String = None
) {}
}
多部分表单数据的类型。
系统能力:SystemCapability.Communication.NetStack
名称 | 类型 | 必填 | 说明 |
name | String | 是 | 数据名称。 |
contentType | String | 是 | 数据类型,如'text/plain','image/png', 'image/jpeg', 'audio/mpeg', 'video/mp4'等。 |
remoteFileName | ?String | 否 | 上传到服务器保存为文件的名称。 |
data | ?HttpData | 否 | 表单数据内容。 |
filePath | ?String | 否 | 此参数根据文件的内容设置mime部件的正文内容。用于代替data将文件数据设置为数据内容,如果data为空,则必须设置filePath。如果data有值,则filePath不会生效。 |
enum HttpDataType
public enum HttpDataType {
STRING |
ARRAY_BUFFER
}
HTTP的数据类型。
系统能力:SystemCapability.Communication.NetStack
名称 | 说明 |
STRING | 字符串类型。 |
ARRAY_BUFFER | 二进制数组类型。 |
enum HttpData
public enum HttpData <: ToString {
STRING_DATA(String) |
ARRAY_DATA(Array<Byte>)
}
HTTP的数据。
系统能力:SystemCapability.Communication.NetStack
名称 | 说明 |
STRING_DATA(String) | 字符串。 |
ARRAY_DATA(Array<Byte>) | 二进制数组。 |
func toString()
public func toString(): String
返回字符串形式的HttpData。
系统能力:SystemCapability.Communication.NetStack
返回值:
类型 | 说明 |
String | 返回字符串形式的HttpData。 |
示例:
import ohos.net.http.*
import ohos.base.*
let httpData = HttpData.STRING_DATA("data to send")
AppLog.info(httpData.toString())
enum HttpProtocol
public enum HttpProtocol {
HTTP1_1 |
HTTP2 |
HTTP3
}
HTTP协议版本。
系统能力:SystemCapability.Communication.NetStack
名称 | 说明 |
HTTP1_1 | 协议HTTP/1.1。 |
HTTP2 | 协议HTTP/2。 |
HTTP3 | 协议HTTP/3,若系统或服务器不支持,则使用低版本的HTTP协议请求。仅对HTTPS的URL生效,HTTP则会请求失败。 |
enum CertType
public enum CertType {
PEM |
DER |
P12
}
证书类型的枚举。
系统能力:SystemCapability.Communication.NetStack
名称 | 说明 |
PEM | 证书类型PEM。 |
DER | 证书类型DER。 |
P12 | 证书类型P12。 |
enum UsingProxy
public enum UsingProxy {
NOT_USE |
USE_DEFAULT |
USE_SPECIFIED(HttpProxy)
}
使用代理的类型
系统能力:SystemCapability.Communication.NetStack
名称 | 说明 |
NOT_USE | 不使用代理。 |
USE_DEFAULT | 使用默认代理。 |
USE_SPECIFIED(HttpProxy) | 使用指定类型代理。 |
如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!
技术交流群可加wx“LB-9191”备注cangjie