华为仓颉鸿蒙HarmonyOS NEXT仓颉原生数据网络HTTP请求(ohos.net.http)

130 阅读16分钟

提供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

参数:

参数名类型必填说明
urlString发起网络请求的URL地址。
callback(?BusinessException, ?HttpResponse) -> Unit回调函数。
options?HttpRequestOptions参考HttpRequestOptions。

错误码:

错误码ID错误信息
401Parameter error.
201Permission denied.
2300001Unsupported protocol.
2300003URL using bad/illegal format or missing URL.
2300005Couldn't resolve proxy name.
2300006Couldn't resolve host name.
2300007Couldn't connect to server.
2300008Weird server reply.
2300009Access denied to remote resource.
2300016Error in the HTTP2 framing layer.
2300018Transferred a partial file.
2300023Failed writing received data to disk/application.
2300025Upload failed.
2300026Failed to open/read local data from file/application.
2300027Out of memory.
2300028Timeout was reached.
2300047Number of redirects hit maximum amount.
2300052Server returned nothing (no headers, no data).
2300055Failed sending data to the peer.
2300056Failure when receiving data from the peer.
2300058Problem with the local SSL certificate.
2300059Couldn't use specified SSL cipher.
2300060SSL peer certificate or SSH remote key was not OK.
2300061Unrecognized or bad HTTP Content or Transfer-Encoding.
2300063Maximum file size exceeded.
2300070Disk full or allocation exceeded.
2300073Remote file already exists.
2300077Problem with the SSL CA cert (path? access rights?).
2300078Remote file not found.
2300094An authentication function returned an error.
2300999Unknown 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

参数:

参数名类型必填说明
urlString发起网络请求的URL地址。
callback(?BusinessException, ?UInt32) -> Unit回调函数。
options?HttpRequestOptions参考HttpRequestOptions。

错误码:

错误码ID错误信息
401Parameter error.
201Permission denied.
2300001Unsupported protocol.
2300003URL using bad/illegal format or missing URL.
2300005Couldn't resolve proxy name.
2300006Couldn't resolve host name.
2300007Couldn't connect to server.
2300008Weird server reply.
2300009Access denied to remote resource.
2300016Error in the HTTP2 framing layer.
2300018Transferred a partial file.
2300023Failed writing received data to disk/application.
2300025Upload failed.
2300026Failed to open/read local data from file/application.
2300027Out of memory.
2300028Timeout was reached.
2300047Number of redirects hit maximum amount.
2300052Server returned nothing (no headers, no data).
2300055Failed sending data to the peer.
2300056Failure when receiving data from the peer.
2300058Problem with the local SSL certificate.
2300059Couldn't use specified SSL cipher.
2300060SSL peer certificate or SSH remote key was not OK.
2300061Unrecognized or bad HTTP Content or Transfer-Encoding.
2300063Maximum file size exceeded.
2300070Disk full or allocation exceeded.
2300073Remote file already exists.
2300077Problem with the SSL CA cert (path? access rights?).
2300078Remote file not found.
2300094An authentication function returned an error.
2300999Unknown 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) -> Unit)

public func onDataReceive(callback: (Array<Byte>) -> Unit): Unit

订阅HTTP流式响应数据接收事件。

说明

暂不支持订阅HTTP流式数据上传的相关事件。

系统能力:SystemCapability.Communication.NetStack

参数:

参数名类型必填说明
callback(Array) -> 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

名称类型必填说明
methodRequestMethod请求方式,默认为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指定返回数据的类型,默认无此字段。如果设置了此参数,系统将优先返回指定的类型。
usingCacheBool是否使用缓存,默认为true,请求时优先读取缓存。 缓存跟随当前进程生效。新缓存会替换旧缓存。
priorityUInt32优先级,范围[1,1000],默认是1。若传参超出范围则使用默认值1。
header?HashMap<String, String>HTTP请求头字段。默认{'content-Type': 'application/json'}。
readTimeoutUInt32读取超时时间。单位为毫秒(ms),默认为60000ms。设置为0表示不会出现超时情况。
connectTimeoutUInt32连接超时时间。单位为毫秒(ms),默认为60000ms。
usingProtocol?HttpProtocol使用协议。默认值由系统自动指定。
usingProxyUsingProxy是否使用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设置指定的DNS服务器进行DNS解析。可以设置多个DNS解析服务器,最多3个服务器。如果有3个以上,只取前3个。服务器必须是IPV4或者IPV6地址。
maxLimitUInt32响应消息的最大字节限制,默认值为5MB,以字节为单位。最大值为10MB,以字节为单位。
multiFormDataList?Array当'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

名称说明
OK200请求成功。一般用于GET与POST请求。
CREATED201已创建。成功请求并创建了新的资源。
ACCEPTED202已接受。已经接受请求,但未处理完成。
NOT_AUTHORITATIVE203非授权信息。请求成功。
NO_CONTENT204无内容。服务器成功处理,但未返回内容。
RESET205重置内容。
PARTIAL206部分内容。服务器成功处理了部分GET请求。
MULT_CHOICE300多种选择。
MOVED_PERM301永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。
MOVED_TEMP302临时移动。
SEE_OTHER303查看其它地址。
NOT_MODIFIED304未修改。
USE_PROXY305使用代理。
BAD_REQUEST400客户端请求的语法错误,服务器无法理解。
UNAUTHORIZED401请求要求用户的身份认证。
PAYMENT_REQUIRED402保留,将来使用。
FORBIDDEN403服务器理解请求客户端的请求,但是拒绝执行此请求。
NOT_FOUND404服务器无法根据客户端的请求找到资源(网页)。
BAD_METHOD405客户端请求中的方法被禁止。
NOT_ACCEPTABLE406服务器无法根据客户端请求的内容特性完成请求。
PROXY_AUTH407请求要求代理的身份认证。
CLIENT_TIMEOUT408请求时间过长,超时。
CONFLICT409服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突。
GONE410客户端请求的资源已经不存在。
LENGTH_REQUIRED411服务器无法处理客户端发送的不带Content-Length的请求信息。
PRECON_FAILED412客户端请求信息的先决条件错误。
ENTITY_TOO_LARGE413由于请求的实体过大,服务器无法处理,因此拒绝请求。
REQ_TOO_LONG414请求的URI过长(URI通常为网址),服务器无法处理。
UNSUPPORTED_TYPE415服务器无法处理请求的格式。
REQUESTED_RANGE_NOT_SATISFIABLE416无法满足请求中Range标头字段指定的范围。该范围可能超出了目标URI数据的大小。
EXPECTATION_FAILED417此响应代码表示服务器无法满足Expect请求标头字段所指示的期望。
TEAPOT418服务端拒绝用茶壶煮咖啡。
MISDIRECTED_REQUEST421请求被定向到无法生成响应的服务器。这可以由未配置为针对请求 URI 中包含的方案和权限组合生成响应的服务器发送。
UNPROCESSABLE_ENTITY422请求格式正确,但由于语义错误而无法遵循。
LOCKED423正在访问的资源已锁定。
FAILED_DEPENDENCY424由于前一个请求失败,请求失败。
TOO_EARLY425表示服务器不愿意冒险处理可能被重播的请求。
UPGRADE_REQUIRED426服务器拒绝使用当前协议执行请求,但在客户端升级到其他协议后可能愿意这样做。 服务端发送带有Upgrade(en-US)字段的426响应 来表明它所需的协议。
PRECONDITION_REQUIRED428源服务器要求请求是有条件的。此响应旨在防止'丢失更新'问题,即当第三方修改服务器上的状态时,客户端GET获取资源的状态,对其进行修改并将其PUT放回服务器,从而导致冲突。
TOO_MANY_REQUESTS429用户在给定的时间内发送了太多请求("限制请求速率"。)
REQUEST_HEADER_FIELDS_TOO_LARGE431服务器不愿意处理请求,因为其头字段太大。在减小请求头字段的大小后,可以重新提交请求
UNAVAILABLE_FOR_LEGAL_REASONS451用户代理请求了无法合法提供的资源,例如政府审查的网页。
INTERNAL_ERROR500服务器内部错误,无法完成请求。
NOT_IMPLEMENTED501服务器不支持请求的功能,无法完成请求。
BAD_GATEWAY502充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。
UNAVAILABLE503由于超载或系统维护,服务器暂时的无法处理客户端的请求。
GATEWAY_TIMEOUT504充当网关或代理的服务器,未及时从远端服务器获取请求。
VERSION505服务器请求的HTTP协议的版本。
VARIANT_ALSO_NEGOTIATES506服务器存在内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当终点。
INSUFFICIENT_STORAGE507无法在资源上执行该方法,因为服务器无法存储成功完成请求所需的表示。
LOOP_DETECTED508服务器在处理请求时检测到无限循环。
NOT_EXTENDED510服务器需要对请求进行进一步扩展才能完成请求。
NETWORK_AUTHENTICATION_REQUIRED511指示客户端需要进行身份验证才能获得网络访问权限。

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

参数:

参数名类型必填说明
codeUInt32状态码的数值。

返回值:

类型说明
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

参数:

参数名类型必填说明
cacheSizeUInt32缓存大小最大为1010241024(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

名称类型必填说明
resultHttpDataHTTP请求根据响应头中content-type类型返回对应的响应格式内容。
resultTypeHttpDataType返回值类型。
responseCodeResponseCode响应的状态码
headerHashMap<String, String>发起HTTP请求返回来的响应头。
cookiesString服务器返回的cookies。
performanceTimingPerformanceTimingHTTP请求的各个阶段的耗时。

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

名称类型必填说明
certPathString证书路径。
keyPathString证书秘钥的路径。
certTypeCertType证书类型,默认是PEM。
keyPassword?String证书秘钥的密码。

class PerformanceTiming

  • ​ public class PerformanceTiming <: ToString {}

性能打点数据,单位为毫秒。

系统能力:SystemCapability.Communication.NetStack

名称类型必填说明
dnsTimingFloat64从request请求到DNS解析完成耗时。
tcpTimingFloat64从request请求到TCP连接完成耗时。
tlsTimingFloat64从request请求到TLS连接完成耗时。
firstSendTimingFloat64从request请求到开始发送第一个字节的耗时。
firstReceiveTimingFloat64从request请求到接收第一个字节的耗时。
totalFinishTimingFloat64从request请求到完成请求的耗时。
redirectTimingFloat64从request请求到完成所有重定向步骤的耗时。
responseHeaderTimingFloat64从request请求到header解析完成的耗时。
responseBodyTimingFloat64从request请求到body解析完成的耗时。
totalTimingFloat64从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

名称类型必填说明
receiveSizeUInt32已接收的数据量单位为字节。
totalSizeUInt32总共要接收的数据量单位为字节。

class DataSendProgressInfo

public class DataSendProgressInfo {}

数据发送信息。

系统能力:SystemCapability.Communication.NetStack

属性

名称类型必填说明
sendSizeUInt32每次发送的数据量单位为字节。
totalSizeUInt32总共要发送的数据量单位为字节。

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

名称类型必填说明
nameString数据名称。
contentTypeString数据类型,如'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)二进制数组。

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