koffi-curl
Version:
Node.js libcurl bindings using koffi with browser fingerprint capabilities
939 lines (927 loc) • 25.8 kB
text/typescript
import { Buffer as Buffer$1 } from 'buffer';
import { CookieJar } from 'tough-cookie';
import { EventEmitter } from 'events';
import { AxiosRequestConfig, AxiosResponse, Axios } from 'axios';
/**
* Curl 类,包装 libcurl 基础功能
*/
declare class Curl {
private handle;
private callbackRefs;
private slists;
private nextSlistId;
/**
* 创建新的 Curl 实例
*/
constructor();
/**
* 关闭并清理 CURL 句柄
*/
close(): void;
/**
* 重置 CURL 句柄为初始状态
*/
reset(): void;
/**
* 设置 CURL 选项
* @param option CURLOPT 选项
* @param value 选项值
*/
setopt(option: number, value: any): void;
/**
* 执行 HTTP 请求
* @returns 错误码
*/
perform(): number;
impersonate(impersonate: string, isDefaultHeader?: boolean): any;
/**
* 获取 CURL 信息
* @param info 信息类型
* @returns 信息值
*/
getinfo(info: number): any;
setHeaders(headers: {
[key: string]: string;
}): void;
upkeep(): void;
static version(): string;
/**
* 复制当前 CURL 句柄
* @returns 新的 Curl 实例
*/
duplicate(): Curl;
/**
* 返回最后一个错误的描述
* @param code 错误码
* @returns 错误描述
*/
static strerror(code: number): string;
/**
* 设置 JA3 指纹
* @param ja3 JA3 指纹字符串
* @param permute 是否允许扩展乱序
*/
setJa3Fingerprint(ja3: string, permute?: boolean): void;
/**
* 设置 Akamai 指纹
* @param akamai Akamai 指纹字符串
*/
setAkamaiFingerprint(akamai: string): void;
/**
* 根据扩展 ID 切换扩展
* @param extensionIds 扩展 ID 集合
*/
private toggleExtensionsByIds;
/**
* 切换单个扩展
* @param extensionId 扩展 ID
* @param enable 是否启用
*/
private toggleExtension;
/**
* 设置额外的指纹参数
* @param extraFp 额外指纹配置
*/
setExtraFingerprint(extraFp: {
tlsMinVersion?: number;
tlsGrease?: boolean;
tlsPermuteExtensions?: boolean;
tlsCertCompression?: 'zlib' | 'brotli';
tlsSignatureAlgorithms?: string[];
http2StreamWeight?: number;
http2StreamExclusive?: number;
}): void;
}
/**
* libcurl 常量定义
* 基于 curl_cffi 项目的 const.py
*/
declare enum CURLOPT {
WRITEDATA = 10001,
URL = 10002,
PORT = 3,
PROXY = 10004,
USERPWD = 10005,
PROXYUSERPWD = 10006,
RANGE = 10007,
READDATA = 10009,
ERRORBUFFER = 10010,
WRITEFUNCTION = 20011,
READFUNCTION = 20012,
TIMEOUT = 13,
INFILESIZE = 14,
POSTFIELDS = 10015,
REFERER = 10016,
FTPPORT = 10017,
USERAGENT = 10018,
LOW_SPEED_LIMIT = 19,
LOW_SPEED_TIME = 20,
RESUME_FROM = 21,
COOKIE = 10022,
HTTPHEADER = 10023,
HTTPPOST = 10024,
SSLCERT = 10025,
KEYPASSWD = 10026,
CRLF = 27,
QUOTE = 10028,
HEADERDATA = 10029,
COOKIEFILE = 10031,
SSLVERSION = 32,
TIMECONDITION = 33,
TIMEVALUE = 34,
CUSTOMREQUEST = 10036,
STDERR = 10037,
POSTQUOTE = 10039,
VERBOSE = 41,
HEADER = 42,
NOPROGRESS = 43,
NOBODY = 44,
FAILONERROR = 45,
UPLOAD = 46,
POST = 47,
DIRLISTONLY = 48,
APPEND = 50,
NETRC = 51,
FOLLOWLOCATION = 52,
TRANSFERTEXT = 53,
PUT = 54,
PROGRESSFUNCTION = 20056,
XFERINFODATA = 10057,
AUTOREFERER = 58,
PROXYPORT = 59,
POSTFIELDSIZE = 60,
HTTPPROXYTUNNEL = 61,
INTERFACE = 10062,
KRBLEVEL = 10063,
SSL_VERIFYPEER = 64,
CAINFO = 10065,
MAXREDIRS = 68,
FILETIME = 69,
TELNETOPTIONS = 10070,
MAXCONNECTS = 71,
FRESH_CONNECT = 74,
FORBID_REUSE = 75,
RANDOM_FILE = 10076,
EGDSOCKET = 10077,
CONNECTTIMEOUT = 78,
HEADERFUNCTION = 20079,
HTTPGET = 80,
SSL_VERIFYHOST = 81,
COOKIEJAR = 10082,
SSL_CIPHER_LIST = 10083,
HTTP_VERSION = 84,
FTP_USE_EPSV = 85,
SSLCERTTYPE = 10086,
SSLKEY = 10087,
SSLKEYTYPE = 10088,
SSLENGINE = 10089,
SSLENGINE_DEFAULT = 90,
DNS_USE_GLOBAL_CACHE = 91,
DNS_CACHE_TIMEOUT = 92,
PREQUOTE = 10093,
DEBUGFUNCTION = 20094,
DEBUGDATA = 10095,
COOKIESESSION = 96,
CAPATH = 10097,
BUFFERSIZE = 98,
NOSIGNAL = 99,
SHARE = 10100,
PROXYTYPE = 101,
ACCEPT_ENCODING = 10102,
PRIVATE = 10103,
HTTP200ALIASES = 10104,
UNRESTRICTED_AUTH = 105,
FTP_USE_EPRT = 106,
HTTPAUTH = 107,
SSL_CTX_FUNCTION = 20108,
SSL_CTX_DATA = 10109,
FTP_CREATE_MISSING_DIRS = 110,
PROXYAUTH = 111,
SERVER_RESPONSE_TIMEOUT = 112,
IPRESOLVE = 113,
MAXFILESIZE = 114,
INFILESIZE_LARGE = 30115,
RESUME_FROM_LARGE = 30116,
MAXFILESIZE_LARGE = 30117,
NETRC_FILE = 10118,
USE_SSL = 119,
POSTFIELDSIZE_LARGE = 30120,
TCP_NODELAY = 121,
FTPSSLAUTH = 129,
IOCTLFUNCTION = 20130,
IOCTLDATA = 10131,
FTP_ACCOUNT = 10134,
COOKIELIST = 10135,
IGNORE_CONTENT_LENGTH = 136,
FTP_SKIP_PASV_IP = 137,
FTP_FILEMETHOD = 138,
LOCALPORT = 139,
LOCALPORTRANGE = 140,
CONNECT_ONLY = 141,
CONV_FROM_NETWORK_FUNCTION = 20142,
CONV_TO_NETWORK_FUNCTION = 20143,
CONV_FROM_UTF8_FUNCTION = 20144,
MAX_SEND_SPEED_LARGE = 30145,
MAX_RECV_SPEED_LARGE = 30146,
FTP_ALTERNATIVE_TO_USER = 10147,
SOCKOPTFUNCTION = 20148,
SOCKOPTDATA = 10149,
SSL_SESSIONID_CACHE = 150,
SSH_AUTH_TYPES = 151,
SSH_PUBLIC_KEYFILE = 10152,
SSH_PRIVATE_KEYFILE = 10153,
FTP_SSL_CCC = 154,
TIMEOUT_MS = 155,
CONNECTTIMEOUT_MS = 156,
HTTP_TRANSFER_DECODING = 157,
HTTP_CONTENT_DECODING = 158,
NEW_FILE_PERMS = 159,
NEW_DIRECTORY_PERMS = 160,
POSTREDIR = 161,
SSH_HOST_PUBLIC_KEY_MD5 = 10162,
OPENSOCKETFUNCTION = 20163,
OPENSOCKETDATA = 10164,
COPYPOSTFIELDS = 10165,
PROXY_TRANSFER_MODE = 166,
SEEKFUNCTION = 20167,
SEEKDATA = 10168,
CRLFILE = 10169,
ISSUERCERT = 10170,
ADDRESS_SCOPE = 171,
CERTINFO = 172,
USERNAME = 10173,
PASSWORD = 10174,
PROXYUSERNAME = 10175,
PROXYPASSWORD = 10176,
NOPROXY = 10177,
TFTP_BLKSIZE = 178,
SOCKS5_GSSAPI_SERVICE = 10179,
SOCKS5_GSSAPI_NEC = 180,
PROTOCOLS = 181,
REDIR_PROTOCOLS = 182,
SSH_KNOWNHOSTS = 10183,
SSH_KEYFUNCTION = 20184,
SSH_KEYDATA = 10185,
MAIL_FROM = 10186,
MAIL_RCPT = 10187,
FTP_USE_PRET = 188,
RTSP_REQUEST = 189,
RTSP_SESSION_ID = 10190,
RTSP_STREAM_URI = 10191,
RTSP_TRANSPORT = 10192,
RTSP_CLIENT_CSEQ = 193,
RTSP_SERVER_CSEQ = 194,
INTERLEAVEDATA = 10195,
INTERLEAVEFUNCTION = 20196,
WILDCARDMATCH = 197,
CHUNK_BGN_FUNCTION = 20198,
CHUNK_END_FUNCTION = 20199,
FNMATCH_FUNCTION = 20200,
CHUNK_DATA = 10201,
FNMATCH_DATA = 10202,
RESOLVE = 10203,
TLSAUTH_USERNAME = 10204,
TLSAUTH_PASSWORD = 10205,
TLSAUTH_TYPE = 10206,
TRANSFER_ENCODING = 207,
CLOSESOCKETFUNCTION = 20208,
CLOSESOCKETDATA = 10209,
GSSAPI_DELEGATION = 210,
DNS_SERVERS = 10211,
ACCEPTTIMEOUT_MS = 212,
TCP_KEEPALIVE = 213,
TCP_KEEPIDLE = 214,
TCP_KEEPINTVL = 215,
SSL_OPTIONS = 216,
MAIL_AUTH = 10217,
SASL_IR = 218,
XFERINFOFUNCTION = 20219,
XOAUTH2_BEARER = 10220,
DNS_INTERFACE = 10221,
DNS_LOCAL_IP4 = 10222,
DNS_LOCAL_IP6 = 10223,
LOGIN_OPTIONS = 10224,
SSL_ENABLE_NPN = 225,
SSL_ENABLE_ALPN = 226,
EXPECT_100_TIMEOUT_MS = 227,
PROXYHEADER = 10228,
HEADEROPT = 229,
PINNEDPUBLICKEY = 10230,
UNIX_SOCKET_PATH = 10231,
SSL_VERIFYSTATUS = 232,
SSL_FALSESTART = 233,
PATH_AS_IS = 234,
PROXY_SERVICE_NAME = 10235,
SERVICE_NAME = 10236,
PIPEWAIT = 237,
DEFAULT_PROTOCOL = 10238,
STREAM_WEIGHT = 239,
STREAM_DEPENDS = 10240,
STREAM_DEPENDS_E = 10241,
TFTP_NO_OPTIONS = 242,
CONNECT_TO = 10243,
TCP_FASTOPEN = 244,
KEEP_SENDING_ON_ERROR = 245,
PROXY_CAINFO = 10246,
PROXY_CAPATH = 10247,
PROXY_SSL_VERIFYPEER = 248,
PROXY_SSL_VERIFYHOST = 249,
PROXY_SSLVERSION = 250,
PROXY_TLSAUTH_USERNAME = 10251,
PROXY_TLSAUTH_PASSWORD = 10252,
PROXY_TLSAUTH_TYPE = 10253,
PROXY_SSLCERT = 10254,
PROXY_SSLCERTTYPE = 10255,
PROXY_SSLKEY = 10256,
PROXY_SSLKEYTYPE = 10257,
PROXY_KEYPASSWD = 10258,
PROXY_SSL_CIPHER_LIST = 10259,
PROXY_CRLFILE = 10260,
PROXY_SSL_OPTIONS = 261,
PRE_PROXY = 10262,
PROXY_PINNEDPUBLICKEY = 10263,
ABSTRACT_UNIX_SOCKET = 10264,
SUPPRESS_CONNECT_HEADERS = 265,
REQUEST_TARGET = 10266,
SOCKS5_AUTH = 267,
SSH_COMPRESSION = 268,
MIMEPOST = 10269,
TIMEVALUE_LARGE = 30270,
HAPPY_EYEBALLS_TIMEOUT_MS = 271,
RESOLVER_START_FUNCTION = 20272,
RESOLVER_START_DATA = 10273,
HAPROXYPROTOCOL = 274,
DNS_SHUFFLE_ADDRESSES = 275,
TLS13_CIPHERS = 10276,
PROXY_TLS13_CIPHERS = 10277,
DISALLOW_USERNAME_IN_URL = 278,
DOH_URL = 10279,
UPLOAD_BUFFERSIZE = 280,
UPKEEP_INTERVAL_MS = 281,
CURLU = 10282,
TRAILERFUNCTION = 20283,
TRAILERDATA = 10284,
HTTP09_ALLOWED = 285,
ALTSVC_CTRL = 286,
ALTSVC = 10287,
MAXAGE_CONN = 288,
SASL_AUTHZID = 10289,
MAIL_RCPT_ALLOWFAILS = 290,
SSLCERT_BLOB = 40291,
SSLKEY_BLOB = 40292,
PROXY_SSLCERT_BLOB = 40293,
PROXY_SSLKEY_BLOB = 40294,
ISSUERCERT_BLOB = 40295,
PROXY_ISSUERCERT = 10296,
PROXY_ISSUERCERT_BLOB = 40297,
SSL_EC_CURVES = 10298,
HSTS_CTRL = 299,
HSTS = 10300,
HSTSREADFUNCTION = 20301,
HSTSREADDATA = 10302,
HSTSWRITEFUNCTION = 20303,
HSTSWRITEDATA = 10304,
AWS_SIGV4 = 10305,
DOH_SSL_VERIFYPEER = 306,
DOH_SSL_VERIFYHOST = 307,
DOH_SSL_VERIFYSTATUS = 308,
CAINFO_BLOB = 40309,
PROXY_CAINFO_BLOB = 40310,
SSH_HOST_PUBLIC_KEY_SHA256 = 10311,
PREREQFUNCTION = 20312,
PREREQDATA = 10313,
MAXLIFETIME_CONN = 314,
MIME_OPTIONS = 315,
SSH_HOSTKEYFUNCTION = 20316,
SSH_HOSTKEYDATA = 10317,
PROTOCOLS_STR = 10318,
REDIR_PROTOCOLS_STR = 10319,
WS_OPTIONS = 320,
CA_CACHE_TIMEOUT = 321,
QUICK_EXIT = 322,
HAPROXY_CLIENT_IP = 10323,
SERVER_RESPONSE_TIMEOUT_MS = 324,
ECH = 10325,
TCP_KEEPCNT = 326,
UPLOAD_FLAGS = 327,
HTTPBASEHEADER = 11000,
SSL_SIG_HASH_ALGS = 11001,
SSL_ENABLE_ALPS = 1002,
SSL_CERT_COMPRESSION = 11003,
SSL_ENABLE_TICKET = 1004,
HTTP2_PSEUDO_HEADERS_ORDER = 11005,
HTTP2_SETTINGS = 11006,
SSL_PERMUTE_EXTENSIONS = 1007,
HTTP2_WINDOW_UPDATE = 1008,
HTTP2_STREAMS = 11010,
TLS_GREASE = 1011,
TLS_EXTENSION_ORDER = 11012,
STREAM_EXCLUSIVE = 1013,
TLS_KEY_USAGE_NO_CHECK = 1014,
TLS_SIGNED_CERT_TIMESTAMPS = 1015,
TLS_STATUS_REQUEST = 1016,
TLS_DELEGATED_CREDENTIALS = 11017,
TLS_RECORD_SIZE_LIMIT = 1018,
TLS_KEY_SHARES_LIMIT = 1019,
TLS_USE_NEW_ALPS_CODEPOINT = 1020,
TLS_USE_FIREFOX_TLS13_CIPHERS = 1021
}
declare const CURLINFO: {
TEXT: number;
EFFECTIVE_URL: number;
RESPONSE_CODE: number;
TOTAL_TIME: number;
NAMELOOKUP_TIME: number;
CONNECT_TIME: number;
PRETRANSFER_TIME: number;
SIZE_UPLOAD_T: number;
SIZE_DOWNLOAD_T: number;
SPEED_DOWNLOAD_T: number;
SPEED_UPLOAD_T: number;
HEADER_SIZE: number;
REQUEST_SIZE: number;
SSL_VERIFYRESULT: number;
FILETIME: number;
FILETIME_T: number;
CONTENT_LENGTH_DOWNLOAD_T: number;
CONTENT_LENGTH_UPLOAD_T: number;
STARTTRANSFER_TIME: number;
CONTENT_TYPE: number;
REDIRECT_TIME: number;
REDIRECT_COUNT: number;
PRIVATE: number;
HTTP_CONNECTCODE: number;
HTTPAUTH_AVAIL: number;
PROXYAUTH_AVAIL: number;
OS_ERRNO: number;
NUM_CONNECTS: number;
SSL_ENGINES: number;
COOKIELIST: number;
FTP_ENTRY_PATH: number;
REDIRECT_URL: number;
PRIMARY_IP: number;
APPCONNECT_TIME: number;
CERTINFO: number;
CONDITION_UNMET: number;
RTSP_SESSION_ID: number;
RTSP_CLIENT_CSEQ: number;
RTSP_SERVER_CSEQ: number;
RTSP_CSEQ_RECV: number;
PRIMARY_PORT: number;
LOCAL_IP: number;
LOCAL_PORT: number;
ACTIVESOCKET: number;
TLS_SSL_PTR: number;
HTTP_VERSION: number;
PROXY_SSL_VERIFYRESULT: number;
SCHEME: number;
TOTAL_TIME_T: number;
NAMELOOKUP_TIME_T: number;
CONNECT_TIME_T: number;
PRETRANSFER_TIME_T: number;
STARTTRANSFER_TIME_T: number;
REDIRECT_TIME_T: number;
APPCONNECT_TIME_T: number;
RETRY_AFTER: number;
EFFECTIVE_METHOD: number;
PROXY_ERROR: number;
REFERER: number;
CAINFO: number;
CAPATH: number;
XFER_ID: number;
CONN_ID: number;
QUEUE_TIME_T: number;
USED_PROXY: number;
POSTTRANSFER_TIME_T: number;
EARLYDATA_SENT_T: number;
HTTPAUTH_USED: number;
PROXYAUTH_USED: number;
LASTONE: number;
};
declare enum CURL_HTTP_VERSION {
NONE = 0,
V1_0 = 1,// please use HTTP 1.0 in the request */
V1_1 = 2,// please use HTTP 1.1 in the request */
V2_0 = 3,// please use HTTP 2 in the request */
V2TLS = 4,// use version 2 for HTTPS, version 1.1 for HTTP */
V2_PRIOR_KNOWLEDGE = 5,// please use HTTP 2 without HTTP/1.1 Upgrade */
V3 = 30,// Makes use of explicit HTTP/3 with fallback.
V3ONLY = 31
}
declare const CURLE: {
OK: number;
UNSUPPORTED_PROTOCOL: number;
FAILED_INIT: number;
URL_MALFORMAT: number;
NOT_BUILT_IN: number;
COULDNT_RESOLVE_PROXY: number;
COULDNT_RESOLVE_HOST: number;
COULDNT_CONNECT: number;
WEIRD_SERVER_REPLY: number;
REMOTE_ACCESS_DENIED: number;
FTP_ACCEPT_FAILED: number;
FTP_WEIRD_PASS_REPLY: number;
FTP_ACCEPT_TIMEOUT: number;
FTP_WEIRD_PASV_REPLY: number;
FTP_WEIRD_227_FORMAT: number;
FTP_CANT_GET_HOST: number;
HTTP2: number;
FTP_COULDNT_SET_TYPE: number;
PARTIAL_FILE: number;
FTP_COULDNT_RETR_FILE: number;
OBSOLETE20: number;
QUOTE_ERROR: number;
HTTP_RETURNED_ERROR: number;
WRITE_ERROR: number;
OBSOLETE24: number;
UPLOAD_FAILED: number;
READ_ERROR: number;
OUT_OF_MEMORY: number;
OPERATION_TIMEDOUT: number;
FTP_PORT_FAILED: number;
FTP_COULDNT_USE_REST: number;
OBSOLETE32: number;
RANGE_ERROR: number;
HTTP_POST_ERROR: number;
SSL_CONNECT_ERROR: number;
BAD_DOWNLOAD_RESUME: number;
FILE_COULDNT_READ_FILE: number;
LDAP_CANNOT_BIND: number;
LDAP_SEARCH_FAILED: number;
OBSOLETE40: number;
FUNCTION_NOT_FOUND: number;
ABORTED_BY_CALLBACK: number;
BAD_FUNCTION_ARGUMENT: number;
OBSOLETE44: number;
INTERFACE_FAILED: number;
OBSOLETE46: number;
TOO_MANY_REDIRECTS: number;
UNKNOWN_OPTION: number;
TELNET_OPTION_SYNTAX: number;
OBSOLETE50: number;
PEER_FAILED_VERIFICATION: number;
GOT_NOTHING: number;
SSL_ENGINE_NOTFOUND: number;
SSL_ENGINE_SETFAILED: number;
SEND_ERROR: number;
RECV_ERROR: number;
OBSOLETE57: number;
SSL_CERTPROBLEM: number;
SSL_CIPHER: number;
SSL_CACERT: number;
BAD_CONTENT_ENCODING: number;
LDAP_INVALID_URL: number;
FILESIZE_EXCEEDED: number;
USE_SSL_FAILED: number;
SEND_FAIL_REWIND: number;
SSL_ENGINE_INITFAILED: number;
LOGIN_DENIED: number;
TFTP_NOTFOUND: number;
TFTP_PERM: number;
REMOTE_DISK_FULL: number;
TFTP_ILLEGAL: number;
TFTP_UNKNOWNID: number;
REMOTE_FILE_EXISTS: number;
TFTP_NOSUCHUSER: number;
CONV_FAILED: number;
CONV_REQD: number;
SSL_CACERT_BADFILE: number;
REMOTE_FILE_NOT_FOUND: number;
SSH: number;
SSL_SHUTDOWN_FAILED: number;
AGAIN: number;
SSL_CRL_BADFILE: number;
SSL_ISSUER_ERROR: number;
FTP_PRET_FAILED: number;
RTSP_CSEQ_ERROR: number;
RTSP_SESSION_ERROR: number;
FTP_BAD_FILE_LIST: number;
CHUNK_FAILED: number;
NO_CONNECTION_AVAILABLE: number;
SSL_PINNEDPUBKEYNOTMATCH: number;
SSL_INVALIDCERTSTATUS: number;
HTTP2_STREAM: number;
RECURSIVE_API_CALL: number;
AUTH_ERROR: number;
HTTP3: number;
QUIC_CONNECT_ERROR: number;
PROXY: number;
SSL_CLIENTCERT: number;
UNRECOVERABLE_POLL: number;
};
declare enum CURL_SSLVERSION {
DEFAULT = 0,
TLSv1 = 1,
SSLv2 = 2,
SSLv3 = 3,
TLSv1_0 = 4,
TLSv1_1 = 5,
TLSv1_2 = 6,
TLSv1_3 = 7,
MAX_DEFAULT = 65536
}
declare enum CURL_IP_RESOLVE {
WHATEVER = 0,
V4 = 1,
V6 = 2
}
type CURL_IMPERSONATE = "edge99" | "edge101" | "chrome99" | "chrome100" | "chrome101" | "chrome104" | "chrome107" | "chrome110" | "chrome116" | "chrome119" | "chrome120" | "chrome123" | "chrome124" | "chrome131" | "chrome133a" | "chrome136" | "chrome99_android" | "chrome131_android" | "safari153" | "safari155" | "safari170" | "safari172_ios" | "safari180" | "safari180_ios" | "safari184" | "safari184_ios" | "firefox133" | "firefox135" | "tor145" | "chrome" | "edge" | "safari" | "safari_ios" | "chrome_android" | "firefox" | "safari15_3" | "safari15_5" | "safari17_0" | "safari17_2_ios" | "safari18_0" | "safari18_0_ios" | "safari18_4" | "safari18_4_ios";
declare const _constants_CURLE: typeof CURLE;
declare const _constants_CURLINFO: typeof CURLINFO;
type _constants_CURLOPT = CURLOPT;
declare const _constants_CURLOPT: typeof CURLOPT;
type _constants_CURL_HTTP_VERSION = CURL_HTTP_VERSION;
declare const _constants_CURL_HTTP_VERSION: typeof CURL_HTTP_VERSION;
type _constants_CURL_IMPERSONATE = CURL_IMPERSONATE;
type _constants_CURL_IP_RESOLVE = CURL_IP_RESOLVE;
declare const _constants_CURL_IP_RESOLVE: typeof CURL_IP_RESOLVE;
type _constants_CURL_SSLVERSION = CURL_SSLVERSION;
declare const _constants_CURL_SSLVERSION: typeof CURL_SSLVERSION;
declare namespace _constants {
export { _constants_CURLE as CURLE, _constants_CURLINFO as CURLINFO, _constants_CURLOPT as CURLOPT, _constants_CURL_HTTP_VERSION as CURL_HTTP_VERSION, type _constants_CURL_IMPERSONATE as CURL_IMPERSONATE, _constants_CURL_IP_RESOLVE as CURL_IP_RESOLVE, _constants_CURL_SSLVERSION as CURL_SSLVERSION };
}
declare class ResponseHeader {
header: {
[key: string]: Array<string>;
};
constructor();
set(key: string, value: string): void;
get(key: string): string | undefined;
getAll(key: string): string[] | undefined;
toString(): string;
}
type RequestHeader = {
[key: string]: string;
};
/**
* HTTP 请求选项接口
*/
interface RequestOptions {
url: string;
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
headers?: RequestHeader;
data?: any;
params?: {
[key: string]: string | number;
};
timeout?: number;
followRedirects?: boolean;
maxRedirects?: number;
proxy?: string;
referer?: string;
acceptEncoding?: string;
userAgent?: string;
impersonate?: CURL_IMPERSONATE;
verifySsl?: boolean;
jar?: CookieJar;
ipType?: 'ipv4' | 'ipv6' | 'auto';
retryCount?: number;
auth?: {
username: string;
password: string;
};
}
/**
* HTTP 响应接口
*/
interface Response {
status: number;
statusText: string;
headers: ResponseHeader;
data: string;
url: string;
redirectCount: number;
buffer: Buffer$1;
duration: number;
}
declare function request(options: RequestOptions): Promise<Response>;
declare function get(url: string, options?: Omit<RequestOptions, 'url' | 'method'>): Promise<Response>;
/**
* POST 请求
*/
declare function post(url: string, data?: any, options?: Omit<RequestOptions, 'url' | 'method'>): Promise<Response>;
/**
* PUT 请求
*/
declare function put(url: string, data?: any, options?: Omit<RequestOptions, 'url' | 'method'>): Promise<Response>;
/**
* DELETE 请求
*/
declare function apiDelete(url: string, options?: Omit<RequestOptions, 'url' | 'method'>): Promise<Response>;
/**
* PATCH 请求
*/
declare function patch(url: string, data?: any, options?: Omit<RequestOptions, 'url' | 'method'>): Promise<Response>;
declare const _default: {
request: typeof request;
get: typeof get;
post: typeof post;
put: typeof put;
delete: typeof apiDelete;
patch: typeof patch;
Response: {
new (body?: BodyInit | null, init?: ResponseInit): globalThis.Response;
prototype: globalThis.Response;
error(): globalThis.Response;
json(data: any, init?: ResponseInit): globalThis.Response;
redirect(url: string | URL, status?: number): globalThis.Response;
};
};
type request$1_RequestOptions = RequestOptions;
type request$1_Response = Response;
type request$1_ResponseHeader = ResponseHeader;
declare const request$1_ResponseHeader: typeof ResponseHeader;
declare const request$1_get: typeof get;
declare const request$1_patch: typeof patch;
declare const request$1_post: typeof post;
declare const request$1_put: typeof put;
declare const request$1_request: typeof request;
declare namespace request$1 {
export { type request$1_RequestOptions as RequestOptions, type request$1_Response as Response, request$1_ResponseHeader as ResponseHeader, _default as default, apiDelete as delete, request$1_get as get, request$1_patch as patch, request$1_post as post, request$1_put as put, request$1_request as request };
}
/**
* WebSocket消息类型
*/
declare enum WsMessageType {
TEXT = 1,
BINARY = 2,
CLOSE = 8,
PING = 9,
PONG = 10
}
/**
* WebSocket选项
*/
interface WebSocketOptions {
headers?: {
[key: string]: string;
};
protocols?: string[];
timeout?: number;
pingInterval?: number;
pongTimeout?: number;
}
/**
* WebSocket消息
*/
interface WsMessage {
type: WsMessageType;
data: Buffer;
text?: string;
}
/**
* WebSocket客户端
*/
declare class WebSocket extends EventEmitter {
private curl;
private connected;
private closing;
private pingTimer?;
private pongTimer?;
private options;
constructor(url: string, options?: WebSocketOptions);
/**
* 设置CURL选项
*/
private setupCurl;
/**
* 生成WebSocket密钥
*/
private generateWebSocketKey;
/**
* 连接WebSocket
*/
connect(): Promise<void>;
/**
* 发送文本消息
*/
sendText(text: string): Promise<void>;
/**
* 发送二进制消息
*/
sendBinary(data: Buffer): Promise<void>;
/**
* 发送ping
*/
ping(data?: Buffer): Promise<void>;
/**
* 发送pong
*/
pong(data?: Buffer): Promise<void>;
/**
* 发送WebSocket帧
*/
private sendFrame;
/**
* 构建WebSocket帧
*/
private buildFrame;
/**
* 处理接收到的WebSocket数据
*/
private handleWebSocketData;
/**
* 解析WebSocket帧
*/
private parseFrame;
/**
* 处理消息
*/
private handleMessage;
/**
* 处理pong响应
*/
private handlePong;
/**
* 处理关闭
*/
private handleClose;
/**
* 开始ping间隔
*/
private startPingInterval;
/**
* 停止ping间隔
*/
private stopPingInterval;
/**
* 关闭WebSocket连接
*/
close(code?: number, reason?: string): Promise<void>;
/**
* 获取连接状态
*/
get readyState(): number;
}
declare const constants: typeof _constants;
declare const libcurlVersion: () => any;
/**
* 日志工具,支持不同级别的日志输出
*/
declare enum LogLevel {
ERROR = 0,
WARN = 1,
INFO = 2,
DEBUG = 3
}
declare class Logger {
private level;
constructor();
/**
* 设置日志级别
*/
setLevel(level: LogLevel): void;
/**
* 获取当前日志级别
*/
getLevel(): LogLevel;
/**
* 错误日志
*/
error(...args: any[]): void;
/**
* 警告日志
*/
warn(...args: any[]): void;
/**
* 信息日志
*/
info(...args: any[]): void;
/**
* 调试日志
*/
debug(...args: any[]): void;
/**
* 检查是否启用了调试模式
*/
isDebugEnabled(): boolean;
/**
* 检查是否启用了警告模式
*/
isWarnEnabled(): boolean;
}
declare const logger: Logger;
type CurlSessionConfig = Omit<AxiosRequestConfig<any>, 'proxy'> & Omit<RequestOptions, 'url'> & {
url?: string;
proxy?: string;
};
type CurlSessionResponse = Omit<AxiosResponse<any>, 'headers'> & Response & {
text: string;
};
declare class CurlSession {
jar?: CookieJar;
axios: Axios;
private _config?;
constructor(config?: CurlSessionConfig);
private initHook;
clone(): CurlSession;
post(url: string, data?: any, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
get(url: string, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
request(config: CurlSessionConfig): Promise<CurlSessionResponse>;
delete(url: string, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
put(url: string, data?: any, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
patch(url: string, data?: any, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
head(url: string, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
options(url: string, config?: CurlSessionConfig): Promise<CurlSessionResponse>;
}
export { Curl, CurlSession, type CurlSessionConfig, type CurlSessionResponse, LogLevel, WebSocket, type WebSocketOptions, type WsMessage, WsMessageType, constants as bindingConstants, _constants as constants, libcurlVersion, logger, request$1 as req };