export type HttpTask = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask; export type HttpRequestTask = UniApp.RequestTask; export type HttpUploadTask = UniApp.UploadTask; export type HttpDownloadTask = UniApp.DownloadTask; export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE" | "UPLOAD" | "DOWNLOAD"; export type HttpRequestHeader = Record; export type HttpParams = Record; export type HttpData = Record; export type HttpResponseType = 'arraybuffer' | 'text'; export type HttpCustom = Record; export type HttpFileType = 'image' | 'video' | 'audio'; export type HttpFormData = Record; export type HttpResponseHeader = Record & { "set-cookie"?: string[] }; export interface HttpRequestConfig { /** @desc 请求服务器接口地址 */ url?: string; /** @desc 请求方式,默认为 GET */ method?: HttpMethod; /** @desc 请求基地址 */ baseURL?: string; /** @desc 请求头信息,不能设置 Referer,App、H5 端会自动带上 cookie,且 H5 端不可手动修改 */ header?: HttpRequestHeader; /** @desc 请求查询参数,自动拼接为查询字符串 */ params?: HttpParams; /** @desc 请求体参数 */ data?: HttpData; /** @desc 超时时间,单位 ms,默认为 60000,仅 H5 (HBuilderX 2.9.9+)、APP (HBuilderX 2.9.9+)、微信小程序 (2.10.0)、支付宝小程序支持 */ timeout?: number; /** @desc 跨域请求时是否携带凭证 (cookies),默认为 false,仅 H5 (HBuilderX 2.6.15+) 支持 */ withCredentials?: boolean; /** @desc 设置响应的数据类型,支付宝小程序不支持 */ responseType?: HttpResponseType; /** @desc 全局自定义验证器 */ validateStatus?: ((statusCode: number) => boolean) | null; /** params 参数自定义处理 */ paramsSerializer?: (params: AnyObject) => string | void; /** @desc 默认为 json,如果设为 json,会尝试对返回的数据做一次 JSON.parse */ dataType?: string; /** @desc DNS 解析时是否优先使用 ipv4,默认为 false,仅 App-Android (HBuilderX 2.8.0+) 支持 */ firstIpv4?: boolean; /** @desc 是否验证 SSL 证书,默认为 true,仅 App-Android (HBuilderX 2.3.3+) 支持 */ sslVerify?: boolean; /** @desc 开启 http2;微信小程序 */ enableHttp2?: boolean; /** @desc 开启 quic;微信小程序 */ enableQuic?: boolean; /** @desc 开启 cache;微信小程序、字节跳动小程序 2.31.0+ */ enableCache?: boolean; /** @desc 开启 httpDNS;微信小程序 */ enableHttpDNS?: boolean; /** @desc httpDNS 服务商;微信小程序 */ httpDNSServiceId?: string; /** @desc 开启 transfer-encoding chunked;微信小程序 */ enableChunked?: boolean; /** @desc wifi下使用移动网络发送请求;微信小程序 */ forceCellularNetwork?: boolean; /** @desc 开启后可在headers中编辑cookie;支付宝小程序 10.2.33+ */ enableCookie?: boolean; /** @desc 是否开启云加速;百度小程序 3.310.11+ */ cloudCache?: boolean | object; /** @desc 控制当前请求是否延时至首屏内容渲染后发送;百度小程序 3.310.11+ */ defer?: boolean; /** @desc 自定义参数 */ custom?: HttpCustom; /** @desc 返回当前请求的 task 和 options,不要在这里修改 options */ getTask?: (task: T, options: HttpRequestConfig) => void; /** @desc 需要上传的文件列表,使用 files 时,filePath 和 name 不生效,仅支持 App、H5 (2.6.15+) */ files?: { name?: string; file?: File; uri: string; }[]; /** @desc 文件类型,仅支付宝小程序支持且为必填项 */ fileType?: HttpFileType; /** @desc 要上传的文件对象,仅 H5 (2.6.15+) 支持 */ file?: File; /** @desc 要上传文件资源的路径,使用 files 时,filePath 和 name 不生效 */ filePath?: string; /** @desc 文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容,使用 files 时,filePath 和 name 不生效 */ name?: string; /** @desc 请求中其他额外的 form data */ formData?: HttpFormData; } export interface HttpResponse { data: T; statusCode: number; header: HttpResponseHeader; config: HttpRequestConfig; cookies: string[]; errMsg: string; rawData: any; } export interface HttpUploadResponse { data: T; statusCode: number; config: HttpRequestConfig; errMsg: string; rawData: any; } export interface HttpDownloadResponse extends HttpResponse { tempFilePath: string; apFilePath?: string; filePath?: string; fileContent?: string; } export interface HttpError { data?: T; statusCode?: number; header?: HttpResponseHeader; config: HttpRequestConfig; cookies?: string[]; errMsg: string; } export interface HttpPromise extends Promise> { } export interface HttpInterceptorManager { use(onFulfilled?: (value: V) => V | Promise, onRejected?: (error: E) => T | Promise): void; eject(id: number): void; } export abstract class HttpRequestAbstract { constructor(config?: HttpRequestConfig); interceptors: { request: HttpInterceptorManager; response: HttpInterceptorManager; } request, D = HttpRequestTask>(config: HttpRequestConfig): Promise; get, D = HttpRequestTask>(url: string, config?: HttpRequestConfig): Promise; delete, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; head, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; options, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; post, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; put, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; config: HttpRequestConfig; setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void; connect, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; trace, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise; upload, D = HttpUploadTask>(url: string, config?: HttpRequestConfig): Promise; download, D = HttpDownloadTask>(url: string, config?: HttpRequestConfig): Promise; middleware, D = HttpTask>(config: HttpRequestConfig): Promise; } declare class HttpRequest extends HttpRequestAbstract { } export default HttpRequest;