yangan
2025-01-20 bcf7914e7b55e72cc453b559086255a56fe53a64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
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<string, string>;
 
export type HttpParams = Record<string, any>;
 
export type HttpData = Record<string, any>;
 
export type HttpResponseType = 'arraybuffer' | 'text';
 
export type HttpCustom = Record<string, any>;
 
export type HttpFileType = 'image' | 'video' | 'audio';
 
export type HttpFormData = Record<string, any>;
 
export type HttpResponseHeader = Record<string, string> & {
    "set-cookie"?: string[]
};
 
export interface HttpRequestConfig<T = HttpTask> {
    /** @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<T>) => 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<T = any, D = HttpTask> {
    data: T;
    statusCode: number;
    header: HttpResponseHeader;
    config: HttpRequestConfig<D>;
    cookies: string[];
    errMsg: string;
    rawData: any;
}
 
export interface HttpUploadResponse<T = any, D = HttpTask> {
    data: T;
    statusCode: number;
    config: HttpRequestConfig<D>;
    errMsg: string;
    rawData: any;
}
 
export interface HttpDownloadResponse extends HttpResponse {
    tempFilePath: string;
    apFilePath?: string;
    filePath?: string;
    fileContent?: string;
}
 
export interface HttpError<T = any, D = HttpTask> {
    data?: T;
    statusCode?: number;
    header?: HttpResponseHeader;
    config: HttpRequestConfig<D>;
    cookies?: string[];
    errMsg: string;
}
 
export interface HttpPromise<T = any> extends Promise<HttpResponse<T>> {
}
 
export interface HttpInterceptorManager<V, E = V> {
    use(onFulfilled?: (value: V) => V | Promise<V>, onRejected?: (error: E) => T | Promise<E>): void;
 
    eject(id: number): void;
}
 
export abstract class HttpRequestAbstract {
    constructor(config?: HttpRequestConfig);
 
    interceptors: {
        request: HttpInterceptorManager<HttpRequestConfig>;
        response: HttpInterceptorManager<HttpResponse, HttpError>;
    }
 
    request<T = any, R = HttpResponse<T>, D = HttpRequestTask>(config: HttpRequestConfig<D>): Promise<R>;
 
    get<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, config?: HttpRequestConfig<D>): Promise<R>;
 
    delete<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    head<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    options<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    post<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    put<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    config: HttpRequestConfig;
 
    setConfig<D = HttpTask>(onSend: (config: HttpRequestConfig<D>) => HttpRequestConfig<D>): void;
 
    connect<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    trace<T = any, R = HttpResponse<T>, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig<D>): Promise<R>;
 
    upload<T = any, R = HttpUploadResponse<T>, D = HttpUploadTask>(url: string, config?: HttpRequestConfig<D>): Promise<R>;
 
    download<T = any, R = HttpDownloadResponse<T>, D = HttpDownloadTask>(url: string, config?: HttpRequestConfig<D>): Promise<R>;
 
    middleware<T = any, R = HttpResponse<T>, D = HttpTask>(config: HttpRequestConfig<D>): Promise<R>;
}
 
declare class HttpRequest extends HttpRequestAbstract {
}
 
export default HttpRequest;