/// /// /// /// import { ClientRequest, IncomingMessage, OutgoingHttpHeaders } from "http"; import { RequestOptions } from "https"; import { UrlObject } from "url"; /** * 发送一个 HTTP/HTTPS 请求 * @param url 要请求的地址 * @param options 附加选项 * @returns 返回本次请求对象,可以调用 `.abort()` 终止请求 */ export declare function request(url: string | UrlObject | URL, options?: HTTPClientRequestOptions): HTTPClientRequest; /** 表示 HTTP 客户端请求的附加选项 */ export interface HTTPClientRequestOptions extends Omit { /** * 请求的 HTTP 方法(全大写) * @default "GET" */ method?: string; /** 附加的 HTTP 请求头 */ headers?: OutgoingHttpHeaders; /** * 请求的代理字符串 * @default "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.0.0 Safari/537.36" */ userAgent?: string | null; /** * 请求内容的类型 * - "json": 请求头的 Content-Type 会被设置为 "application/json";请求的数据将按 JSON 格式化 * - "form": 请求头的 Content-Type 会被设置为 "application/x-www-form-urlencoded";请求的数据将按表单格式化 * - "multipart": 请求头的 Content-Type 会被设置为 "multipart/form-data";请求的数据将按含文件的表单格式化 * - "text": 请求头的 Content-Type 会被设置为 "text/plain" * - 其它: 请求头的 Content-Type 会被设置为 dataType,请求的数据将原样发送 * @default "form" */ dataType?: "json" | "form" | "multipart" | "text" | string; /** 请求的内容,可以是字符串、流或 JSON 对象 */ data?: any; /** * 响应服务端的 3XX 重定向的最大次数,如果为 0 则不重定向 * @default 10 */ maxRedirects?: number; /** 如果需要保存 Cookie 以便下一次请求提交,可以在两次请求时传入同一个 Cookie 容器对象 */ cookieJar?: CookieJar; } /** 表示一个 HTTP 客户端响应 */ export interface HTTPClientRequest extends ClientRequest, PromiseLike { /** 获取请求的错误 */ error?: Error; /** 获取服务端的响应 */ response?: HTTPClientResponse; } /** 表示一个 HTTP 客户端响应 */ export interface HTTPClientResponse extends IncomingMessage { /** 获取响应的实际地址 */ urlObject?: UrlObject; /** 获取响应的二进制数据 */ body?: Buffer; /** 获取响应的文本数据 */ text?: string; /** 获取响应的 JSON 数据 */ json?: any; } /** 表示一个 Cookie 容器 */ export declare class CookieJar { /** * 获取发送指定请求时提交的 Cookie 请求头 * @param url 要发送的地址 */ getCookiesHeader(url: string | URL | UrlObject): string; /** * 从 HTTP 响应的 Set-Cookie 头更新 Cookie * @param url 当前请求的地址 * @param header 响应的 Set-Cookie 头 * @param now 当前客户端时间 */ setCookiesFromHeader(url: string | URL | UrlObject, header: string, now?: Date): void; /** 所有 Cookies,存储所属的域到所属的路径到 Cookie 名到 Cookie 对象的映射关系 */ private readonly _cookies; /** * 获取属于某个地址的所有 Cookie * @param url 所属的地址 * @param now 如果提供了当前时间,则过滤已过期的 Cookie * @param noHttpOnly 是否过滤不能在客户端脚本获取的 Cookie * @param noSecure 是否过滤只能在加密协议传输的 Cookie */ getCookies(url: string | URL | UrlObject, now?: Date, noHttpOnly?: boolean, noSecure?: boolean): HTTPCookie[]; /** * 添加指定地址所属的 Cookie * @param url 所属的地址 * @param cookie 要添加的 Cookie * @param now 如果提供了当前时间,则删除已过期的 Cookie */ setCookie(url: string | URL | UrlObject, cookie: HTTPCookie, now?: Date): void; /** * 获取属于某个地址的指定名称的 Cookie 值,如果不存在则返回 `undefined` * @param url 所属的地址 * @param name 要获取的 Cookie 名 * @param now 如果提供了当前时间,则过滤已过期的 Cookie * @param noHttpOnly 是否过滤不能在客户端脚本获取的 Cookie * @param noSecure 是否过滤只能在加密协议传输的 Cookie */ getCookie(url: string | URL | UrlObject, name: string, now?: Date, noHttpOnly?: boolean, noSecure?: boolean): string; } /** 表示一个 HTTP Cookie */ export interface HTTPCookie { /** Cookie 的名字(不能包含:`( ) < > @ , ; : \ " / [ ] ? = { }`) */ name: string; /** Cookie 的值 */ value: string; /** Cookie 的过期时间 */ expires?: Date; /** Cookie 所属的域 */ domain?: string; /** Cookie 所属的路径 */ path?: string; /** 是否禁止在客户端脚本中获取此 Cookie */ httpOnly?: boolean; /** 是否只在安全协议下才能传输此 Cookie */ secure?: boolean; /** Cookie 的同源策略 */ sameSite?: boolean; }