CapacitorHttp
Capacitor Http API 通过修补 fetch 和 XMLHttpRequest 来使用原生库,提供原生 HTTP 支持。它还提供了无需使用 fetch 和 XMLHttpRequest 的原生 HTTP 请求辅助方法。此插件与 @capacitor/core 捆绑提供。
配置
默认情况下,修补 window.fetch 和 XMLHttpRequest 以使用原生库的功能是禁用的。
如果您希望启用此功能,请在 capacitor.config 文件中修改以下配置。
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
enabled | boolean | 启用修补 fetch 和 XMLHttpRequest 以使用原生库。 | false |
配置示例
在 capacitor.config.json 中:
{
"plugins": {
"CapacitorHttp": {
"enabled": true
}
}
}
在 capacitor.config.ts 中:
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
CapacitorHttp: {
enabled: true,
},
},
};
export default config;
示例
import { CapacitorHttp } from '@capacitor/core';
// GET 请求示例
const doGet = () => {
const options = {
url: 'https://example.com/my/api',
headers: { 'X-Fake-Header': 'Fake-Value' },
params: { size: 'XL' },
};
const response: HttpResponse = await CapacitorHttp.get(options);
// 或者...
// const response = await CapacitorHttp.request({ ...options, method: 'GET' })
};
// POST 请求示例。注意:数据可以作为原始 JS 对象传递(必须是可 JSON 序列化的)
const doPost = () => {
const options = {
url: 'https://example.com/my/api',
headers: { 'X-Fake-Header': 'Fake-Value' },
data: { foo: 'bar' },
};
const response: HttpResponse = await CapacitorHttp.post(options);
// 或者...
// const response = await CapacitorHttp.request({ ...options, method: 'POST' })
};
大文件支持
由于桥接的特性,解析大量数据并将其从原生端传输到网页端可能会引发问题。@capacitor/file-transfer插件(https://capacitorjs.com/docs/apis/file-transfer)已新 增对文件下载和上传的支持。在许多情况下,你可能还需要`@capacitor/filesystem`插件(https://capacitorjs.com/docs
API
** HTTP 插件 ***
request(...)
request(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
get(...)
get(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP GET 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
post(...)
post(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP POST 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
put(...)
put(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP PUT 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
patch(...)
patch(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP PATCH 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
delete(...)
delete(options: HttpOptions) => Promise<HttpResponse>
使用原生库向服务器发出 HTTP DELETE 请求。
| 参数 | 类型 |
|---|---|
options | |
返回:
Promise<HttpResponse>
Interfaces
HttpResponse
| 属性 | 类型 | 描述 |
|---|---|---|
data | any | 从 HTTP 响应接收的额外数据。 |
status | number | 从 HTTP 响应接收的状态码。 |
headers | | 从 HTTP 响应接收的标头。 |
url | string | 从 HTTP 响应接收的响应 URL。 |
HttpHeaders
HttpOptions
| 属性 | 类型 | 描述 |
|---|---|---|
url | string | 要发送请求的 URL。 |
method | string | 要运行的 HTTP 请求方法。(默认为 GET) |
params | | 要附加到请求的 URL 参数。 |
data | any | 注意:在 Android 和 iOS 上,数据只能是字符串或 JSON。FormData、Blob、ArrayBuffer 和其他复杂类型仅直接在 Web 上支持,或通过启用配置中的 CapacitorHttp 并使用修补的 window.fetch 或 XMLHttpRequest 来支持。如果您需要发送复杂类型,应将数据序列化为 base64 并相应设置 headers["Content-Type"] 和 dataType 属性。 |
headers | | 要随请求发送的 HTTP 请求标头。 |
readTimeout | number | 等待读取额外数据的超时时间(毫秒)。每次接收到新数据时重置。 |
connectTimeout | number | 初始连接的超时时间(毫秒)。 |
disableRedirects | boolean | 设置是否禁用自动 HTTP 重定向 |
webFetchExtra | | 在 Web 上运行时用于 fetch 的额外参数 |
responseType | | 用于在将响应返回给请求者之前适当解析响应。如果响应内容类型为 "json",则忽略此值。 |
shouldEncodeUrlParams | boolean | 如果您需要在某些情况下保持 URL 未编码(已编码、azure/firebase 测试等),请使用此选项。默认值为 true。 |
dataType | 'file' | 'formData' | 如果我们必须从需要在本机层特殊处理的 JS 类型转换数据,则使用此选项 |
HttpParams
RequestInit
| 属性 | 类型 | 描述 |
|---|---|---|
body | | 一个 BodyInit 对象或 null 以设置请求的正文。 |
cache | | 一个字符串,指示请求如何与浏览器的缓存交互以设置请求的缓存。 |
credentials | | 一个字符串,指示是否总是、从不或仅在发送到同源 URL 时发送凭据。设置请求的凭据。 |
headers | | 一个 Headers 对象、对象字面量或二元数组的数组以设置请求的标头。 |
integrity | string | 要由请求获取的资源的加密哈希。设置请求的完整性。 |
keepalive | boolean | 一个布尔值以设置请求的 keepalive。 |
method | string | 一个字符串以设置请求的方法。 |
mode | | 一个字符串,指示请求是否使用 CORS,或是否限制为同源 URL。设置请求的模式。 |
redirect | | 一个字符串,指示请求是否遵循重定向、在遇到重定向时出错或返回重定向(以不透明的方式)。设置请求的重定向。 |
referrer | string | 一个字符串,其值是同源 URL、"about:client" 或空字符串,以设置请求的引用者。 |
referrerPolicy | | 一个引用者策略以设置请求的 referrerPolicy。 |
signal | | 一个 AbortSignal 以设置请求的信号。 |
window | any | 只能为 null。用于将请求与任何窗口分离。 |
Blob
一个不可变的原始数据文件类对象。Blob 表示不一定处于 JavaScript 原生格式的数据。File 接口基于 Blob,继承 blob 功能并将其扩展以支持用户系统上的文件。
Blob 类是 require('node:buffer').Blob 的全局引用
https://nodejs.org/api/buffer.html#class-blob
| 属性 | 类型 |
|---|---|
size | number |
type | string |
| 方法 | 签名 |
|---|---|
| arrayBuffer | () => Promise<ArrayBuffer> |
| slice | (start?: number, end?: number, contentType?: string) => Blob |
| stream | () => ReadableStream |
| text | () => Promise<string> |
ArrayBuffer
表示二进制数据的原始缓冲区,用于存储不同类型数组的数据。ArrayBuffers 不能直接读取或写入,但可以传递给类型化数组或 DataView 对象以根据需要解释原始缓冲区。
| 属性 | 类型 | 描述 |
|---|---|---|
byteLength | number | 只读。ArrayBuffer 的长度(字节)。 |
| 方法 | 签名 | 描述 |
|---|---|---|
| slice | (begin: number, end?: number) => ArrayBuffer | 返回 ArrayBuffer 的一个部分。 |
ReadableStream
此 Streams API 接口表示字节数据的可读流。Fetch API 通过 Response 对象的 body 属性提供 ReadableStream 的具体实例。
| 属性 | 类型 |
|---|---|
locked | boolean |
| 方法 | 签名 |
|---|---|
| cancel | (reason?: any) => Promise<void> |
| getReader | () => ReadableStreamDefaultReader<R> |
| pipeThrough | <T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions) => ReadableStream<T> |
| pipeTo | (dest: WritableStream<R>, options?: StreamPipeOptions) => Promise<void> |
| tee | () => [ReadableStream<R>, ReadableStream<R>] |
ReadableStreamDefaultReader
| 方法 | 签名 |
|---|---|
| read | () => Promise<ReadableStreamDefaultReadResult<R>> |
| releaseLock | () => void |
ReadableStreamDefaultReadValueResult
| 属性 | 类型 |
|---|---|
done | false |
value | T |
ReadableStreamDefaultReadDoneResult
| 属性 | 类型 |
|---|---|
done | true |
value |
ReadableWritablePair
| 属性 | 类型 | 描述 |
|---|---|---|
readable | | |
writable | | 提供一种方便、可链式的方式将此可读流通过转换流(或任何其他 { writable, readable } 对)进行管道传输。它简单地将流传输到所提供对的可写侧,并返回可读侧以供进一步使用。管道传输流将在管道期间锁定它,防止任何其他消费者获取读取器。 |
WritableStream
此 Streams API 接口提供了一个标准抽象,用于将流数据写入目标(称为接收器)。此对象内置了背压和队列功能。
| 属性 | 类型 |
|---|---|
locked | boolean |
| 方法 | 签名 |
|---|---|
| abort | (reason?: any) => Promise<void> |
| getWriter | () => WritableStreamDefaultWriter<W> |
WritableStreamDefaultWriter
此 Streams API 接口是 WritableStream.getWriter() 返回的对象,一旦创建,就将写入器锁定到 WritableStream,确保没有其他流可以写入底层接收器。
| 属性 | 类型 |
|---|---|
closed | Promise<undefined> |
desiredSize | number |
ready | Promise<undefined> |
| 方法 | 签名 |
|---|---|
| abort | (reason?: any) => Promise<void> |
| close | () => Promise<void> |
| releaseLock | () => void |
| write | (chunk: W) => Promise<void> |
StreamPipeOptions
| 属性 | 类型 | 描述 |
|---|---|---|
preventAbort | boolean | |
preventCancel | boolean | |
preventClose | boolean | 将此可读流管道传输到给定的可写流目标。可以通过传递的选项自定义管道过程在各种错误条件下的行为。它返回一个在管道过程成功完成时履行的 promise,或者在遇到任何错误时拒绝。管道传输流将在管道期间锁定它,防止任何其他消费者获取读取器。源和目标流的错误和关闭传播如下:此源可读流中的错误将中止目标,除非 preventAbort 为真。返回的 promise 将被源的错误或中止目标期间发生的任何错误拒绝。目标中的错误将取消此源可读流,除非 preventCancel 为真。返回的 promise 将被目标的错误或取消源期间发生的任何错误拒绝。当此源可读流关闭时,目标将被关闭,除非 preventClose 为真。返回的 promise 将在此过程完成时履行,除非在关闭目标时遇到错误,在这种情况下它将因该错误而被拒绝。如果目标一开始就关闭或正在关闭,此源可读流将被取消,除非 preventCancel 为 true。返回的 promise 将因指示管道传输到关闭流失败的错误或取消源期间发生的任何错误而被拒绝。signal 选项可以设置为 AbortSignal 以允许通过相应的 AbortController 中止正在进行的管道操作。在这种情况下,此源可读流将被取消,目标将被中止,除非 respective options preventCancel 或 preventAbort 已设置。 |
signal | |
AbortSignal
一个信号对象,允许您与 DOM 请求(如 Fetch)通信,并在需要时通过 AbortController 对象中止它。
| 属性 | 类型 | 描述 |
|---|---|---|
aborted | boolean | 如果此 AbortSignal 的 AbortController 已发出中止信号,则返回 true,否则返回 false。 |
onabort | |
| 方法 | 签名 | 描述 |
|---|---|---|
| addEventListener | <K extends "abort">(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions) => void | 为类型属性值为 type 的事件追加事件监听器。callback 参数设置事件被分派时将调用的回调。options 参数设置监听器特定的选项。为了兼容性,这可以是一个布尔值,在这种情况下,该方法的行为完全如同值被指定为 options 的 capture。当设置为 true 时,options 的 capture 阻止 callback 在事件的事件阶段属性值为 BUBBLING_PHASE 时被调用。当为 false(或不存在)时,callback 在事件的事件阶段属性值为 CAPTURING_PHASE 时不会被调用。无论哪种方式,callback 将在事件的事件阶段属性值为 AT_TARGET 时被调用。当设置为 true 时,options 的 passive 表示 callback 不会通过调用 preventDefault() 来取消事件。这用于启用 §2.8 观察事件监听器中描述的性能优化。当设置为 true 时,options 的 once 表示 callback 只会被调用一次,之后事件监听器将被移除。事件监听器被追加到目标的事件监听器列表中,如果它具有相同的类型、回调和捕获,则不会被追加。 |
| addEventListener | (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void | 为类型属性值为 type 的事件追加事件监听器。callback 参数设置事件被分派时将调用的回调。options 参数设置监听器特定的选项。为了兼容性,这可以是一个布尔值,在这种情况下,该方法的行为完全如同值被指定为 options 的 capture。当设置为 true 时,options 的 capture 阻止 callback 在事件的事件阶段属性值为 BUBBLING_PHASE 时被调用。当为 false(或不存在)时,callback 在事件的事件阶段属性值为 CAPTURING_PHASE 时不会被调用。无论哪种方式,callback 将在事件的事件阶段属性值为 AT_TARGET 时被调用。当设置为 true 时,options 的 passive 表示 callback 不会通过调用 preventDefault() 来取消事件。这用于启用 §2.8 观察事件监听器中描述的性能优化。当设置为 true 时,options 的 once 表示 callback 只会被调用一次,之后事件监听器将被移除。事件监听器被追加到目标的事件监听器列表中,如果它具有相同的类型、回调和捕获,则不会被追加。 |
| removeEventListener | <K extends "abort">(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions) => void | 从目标的事件监听器 列表中移除具有相同类型、回调和选项的事件监听器。 |
| removeEventListener | (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions) => void | 从目标的事件监听器列表中移除具有相同类型、回调和选项的事件监听器。 |
AbortSignalEventMap
| 属性 | 类型 |
|---|---|
"abort" | |
Event
在 DOM 中发生的事件。
| 属性 | 类型 | 描述 |
|---|---|---|
bubbles | boolean | 根据事件的初始化方式返回 true 或 false。如果事件以其目标的祖先的反向树顺序进行,则为 true,否则为 false。 |
cancelBubble | boolean | |
cancelable | boolean | 根据事件的初始化方式返回 true 或 false。其返回值并不总是有意义,但 true 可以表示事件被分派期间的操作部分可以通过调用 preventDefault() 方法取消。 |
composed | boolean | 根据事件的初始化方式返回 true 或 false。如果事件调用其目标的 ShadowRoot 节点之外的监听器,则为 true,否则为 false。 |
currentTarget | | 返回当前正在调用其事件监听器回调的对象。 |
defaultPrevented | boolean | 如果 preventDefault() 被成功调用以指示取消,则返回 true,否则返回 false。 |
eventPhase | number | 返回事件的阶段,即 NONE、CAPTURING_PHASE、AT_TARGET 和 BUBBLING_PHASE 之一。 |
isTrusted | boolean | 如果事件由用户代理分派,则返回 true,否则返回 false。 |
returnValue | boolean | |
srcElement | | |
target | | 返回事件被分派到的对象(其目标)。 |
timeStamp | number | 返回事件的时间戳,作为相对于时间原点测量的毫秒数。 |
type | string | 返回事件的类型,例如 "click"、"hashchange" 或 "submit"。 |
AT_TARGET | number | |
BUBBLING_PHASE | number | |
CAPTURING_PHASE | number | |
NONE | number |
| 方法 | 签名 | 描述 |
|---|---|---|
| composedPath | () => EventTarget[] | 返回事件路径的调用目标对象(将调用监听器的对象),除了任何影子树中模式为 "closed" 且无法从事件的 currentTarget 访问的节点。 |
| initEvent | (type: string, bubbles?: boolean, cancelable?: boolean) => void | |
| preventDefault | () => void | 如果在可取消属性值为 true 时调用,并且在执行事件的监听器时 passive 设置为 false,则向导致事件被分派的操作发出信号,表示需要取消。 |
| stopImmediatePropagation | () => void | 调用此方法阻止事件到达当前监听器完成后任何已注册的事件监听器,并且在树中分派时,也阻止事件到达任何其他对象。 |
| stopPropagation | () => void | 在树中分派时,调用此方法阻止事件到达当前对象之外的任何对象。 |
EventTarget
EventTarget 是一个 DOM 接口,由可以接收事件并可能具有监听器的对象实现。 EventTarget 是一个 DOM 接口,由可以 接收事件并可能具有监听器的对象实现。
| 方法 | 签名 | 描述 |
|---|---|---|
| addEventListener | (type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions) => void | 为类型属性值为 type 的事件追加事件监听器。callback 参数设置事件被分派时将调用的回调。options 参数设置监听器特定的选项。为了兼容性,这可以是一个布尔值,在这种情况下,该方法的行为完全如同值被指定为 options 的 capture。当设置为 true 时,options 的 capture 阻止 callback 在事件的事件阶段属性值为 BUBBLING_PHASE 时被调用。当为 false(或不存在)时,callback 在事件的事件阶段属性值为 CAPTURING_PHASE 时不会被调用。无论哪种方式,callback 将在事件的事件阶段属性值为 AT_TARGET 时被调用。当设置为 true 时,options 的 passive 表示 callback 不会通过调用 preventDefault() 来取消事件。这用于启用 §2.8 观察事件监听器中描述的性能优化。当设置为 true 时,options 的 once 表示 callback 只会被调用一次,之后事件监听器将被移除。事件监听器被追加到目标的事件监听器列表中,如果它具有相同的类型、回调和捕获,则不会被追加。 |
| dispatchEvent | (event: Event) => boolean | 将合成事件 event 分派到目标 ,如果事件的 cancelable 属性值为 false 或其 preventDefault() 方法未被调用,则返回 true,否则返回 false。 |
| removeEventListener | (type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean) => void | 从目标的事件监听器列表中移除具有相同类型、回调和选项的事件监听器。 |
EventListener
EventListenerObject
| 方法 | 签名 |
|---|---|
| handleEvent | (evt: Event) => void |
AddEventListenerOptions
| 属性 | 类型 |
|---|---|
once | boolean |
passive | boolean |
EventListenerOptions
| 属性 | 类型 |
|---|---|
capture | boolean |
ArrayBufferView
| 属性 | 类型 | 描述 |
|---|---|---|
buffer | | 数组引用的 ArrayBuffer 实例。 |
byteLength | number | 数组的长度(字节)。 |
byteOffset | number | 数组的偏移量(字节)。 |
ArrayBufferTypes
允许的 ArrayBuffer 类型,用于 ArrayBufferView 和相关类型化数组的缓冲区。
| 属性 | 类型 |
|---|---|
ArrayBuffer | |
FormData
提供了一种简单的方式来构造一组键/值对,表示表单字段及其值,然后可以使用 XMLHttpRequest.send() 方法轻松发送。它使用与表单相同的格式,如果编码类型设置为 "multipart/form-data"。
| 方法 | 签名 |
|---|---|
| append | (name: string, value: string | Blob, fileName?: string) => void |
| delete | (name: string) => void |
| get | (name: string) => FormDataEntryValue | null |
| getAll | (name: string) => FormDataEntryValue[] |
| has | (name: string) => boolean |
| set | (name: string, value: string | Blob, fileName?: string) => void |
| forEach | (callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any) => void |
File
提供有关文件的信息,并允许网页中的 JavaScript 访问其内容。
| 属性 | 类型 |
|---|---|
lastModified | number |
name | string |
URLSearchParams
URLSearchParams 类是 require('url').URLSearchParams 的全局引用
https://nodejs.org/api/url.html#class-urlsearchparams
| 方法 | 签名 | 描述 |
|---|---|---|
| append | (name: string, value: string) => void | 将指定的键/值对作为新的搜索参数追加。 |
| delete | (name: string) => void | 从所有搜索参数列表中删除给定的搜索参数及其关联值。 |
| get | (name: string) => string | null | 返回与给定搜索参数关联的第一个值。 |
| getAll | (name: string) => string[] | 返回与给定搜索参数关联的所有值。 |
| has | (name: string) => boolean | 返回一个布尔值,指示是否存在这样的搜索参数。 |
| set | (name: string, value: string) => void | 将与给定搜索参数关联的值设置为给定值。如果有多个值,则删除其他值。 |
| sort | () => void | |
| toString | () => string | 返回包含适合在 URL 中使用的查询字符串的字符串。不包括问号。 |
| forEach | (callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any) => void |