网络请求
提供高性能的多线程请求,并支持下载功能
ssf.Request 功能概述
主要用于多线程请求网络,注意这个底层使用多线程不同于js多线程,此多线程性能远快于js多线程机制,例如爬虫相关功能 也支持下载文件
接口定义
结果模型 (ResultModel)
属性名 | 类型 | 描述 |
---|---|---|
req_url | string | 请求的原始 URL |
url | string | 实际请求的 URL |
msg | string | 返回的消息 |
code | number | 状态码 |
cost_time | number | 耗时(毫秒) |
text | string | 响应文本内容 |
temp | string | 临时字段 |
bytes | number[] | 响应体字节数据 |
status_code | number | HTTP 状态码 |
header | Record<string, string> | 响应头信息 |
remote_addr | string | 远程地址 |
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/data',
header: {
'Content-Type': 'application/json'
},
timeout: 5000 // 5秒超时
};
ssf.Request.get([requestModel])
.then((results) => {
const result = results[0];
console.log(`请求URL: ${result.req_url}`);
console.log(`实际请求URL: ${result.url}`);
console.log(`返回消息: ${result.msg}`);
console.log(`状态码: ${result.code}`);
console.log(`耗时: ${result.cost_time} ms`);
console.log(`响应文本: ${result.text}`);
console.log(`临时字段: ${result.temp}`);
console.log(`响应体字节数据: ${result.bytes}`);
console.log(`HTTP状态码: ${result.status_code}`);
console.log(`响应头信息: ${JSON.stringify(result.header)}`);
console.log(`远程地址: ${result.remote_addr}`);
})
.catch((error) => {
console.error('请求失败:', error);
});
请求模型 (RequestModel)
属性名 | 类型 | 描述 |
---|---|---|
url | string | 请求的 URL |
proxy | string | null | 使用的代理服务器 URL |
header | Record<string, string> | null | 请求头信息 |
timeout | number | null | 超时时间(毫秒) |
encoding | string | null | 编码类型 |
data | string | null | 发送的数据(POST/PUT/PATCH) |
result_type | string | null | 结果类型 |
temp | string | null | 临时字段 |
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/post',
header: {
'Content-Type': 'application/json'
},
data: JSON.stringify({ key: 'value' }),
timeout: 5000 // 5秒超时
};
ssf.Request.post([requestModel])
.then((results) => {
const result = results[0];
console.log(`请求成功: ${result.url}`);
})
.catch((error) => {
console.error('请求失败:', error);
});
下载进度 (DownloadProgress)
属性名 | 类型 | 描述 |
---|---|---|
filename | string | 文件名 |
current_size | number | 当前已下载大小(字节) |
total_size | number | 总大小(字节) |
示例
// 假设我们正在监控某个下载任务
const progress = ssf.Request.download_look(1000); // 每秒检查一次
console.log(`文件名: ${progress.filename}`);
console.log(`已下载大小: ${progress.current_size} 字节`);
console.log(`总大小: ${progress.total_size} 字节`);
下载结果模型 (DownloadResultModel)
属性名 | 类型 | 描述 |
---|---|---|
url | string | 下载的 URL |
code | string | 下载状态码 |
file_name | string | 文件名 |
error | string | 错误信息(如果有的话) |
size | string | 文件大小(字节) |
resumable | string | 是否支持断点续传 |
示例
const urls: string[] = [
'https://example.com/file1.zip',
'https://example.com/file2.zip'
];
ssf.Request.download(urls, '/path/to/save', 2, 3, 'http://proxy.example.com')
.then((results) => {
results.forEach(result => {
console.log(`下载结果: ${result.url}`);
console.log(`文件名: ${result.file_name}`);
console.log(`状态码: ${result.code}`);
console.log(`文件大小: ${result.size}`);
console.log(`是否支持断点续传: ${result.resumable}`);
if (result.error) {
console.error(`错误信息: ${result.error}`);
}
});
})
.catch((error) => {
console.error('下载失败:', error);
});
请求方法
GET 请求
- 函数签名:
get(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 GET 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/data',
header: {
'Content-Type': 'application/json'
},
timeout: 5000 // 5秒超时
};
ssf.Request.get([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`GET请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应内容: ${result.text}`);
});
})
.catch((error) => {
console.error('GET请求错误:', error);
});
POST 请求
- 函数签名:
post(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 POST 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/post',
header: {
'Content-Type': 'application/json'
},
data: JSON.stringify({ key: 'value' }),
timeout: 5000 // 5秒超时
};
ssf.Request.post([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`POST请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应内容: ${result.text}`);
});
})
.catch((error) => {
console.error('POST请求错误:', error);
});
HEAD 请求
- 函数签名:
head(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 HEAD 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/head',
header: {
'Content-Type': 'application/json'
},
timeout: 5000 // 5秒超时
};
ssf.Request.head([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`HEAD请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应头信息: ${JSON.stringify(result.header)}`);
});
})
.catch((error) => {
console.error('HEAD请求错误:', error);
});
PATCH 请求
- 函数签名:
patch(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 PATCH 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/patch',
header: {
'Content-Type': 'application/json'
},
data: JSON.stringify({ key: 'value' }),
timeout: 5000 // 5秒超时
};
ssf.Request.patch([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`PATCH请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应内容: ${result.text}`);
});
})
.catch((error) => {
console.error('PATCH请求错误:', error);
});
PUT 请求
- 函数签名:
put(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 PUT 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/put',
header: {
'Content-Type': 'application/json'
},
data: JSON.stringify({ key: 'value' }),
timeout: 5000 // 5秒超时
};
ssf.Request.put([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`PUT请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应内容: ${result.text}`);
});
})
.catch((error) => {
console.error('PUT请求错误:', error);
});
DELETE 请求
- 函数签名:
Delete(pars: RequestModel[]): Promise<ResultModel[]>
- 描述: 发起一个或多个 DELETE 请求。
示例
const requestModel: ssf.RequestModel = {
url: 'https://api.example.com/delete',
header: {
'Content-Type': 'application/json'
},
timeout: 5000 // 5秒超时
};
ssf.Request.Delete([requestModel])
.then((results) => {
results.forEach(result => {
console.log(`DELETE请求结果: ${result.req_url}`);
console.log(`响应状态码: ${result.status_code}`);
console.log(`响应内容: ${result.text}`);
});
})
.catch((error) => {
console.error('DELETE请求错误:', error);
});
下载方法
下载文件
- 函数签名:
download(url: String[], save_path: String, concurrent_downloads?: number, retries?: number, proxy?: String): Promise<DownloadResultModel[]>
- 描述: 下载一个或多个文件到指定路径,支持设置并发下载任务数、重试次数及是否使用代理。
示例
const urls: string[] = [
'https://example.com/file1.zip',
'https://example.com/file2.zip'
];
ssf.Request.download(urls, '/path/to/save', 2, 3, 'http://proxy.example.com')
.then((results) => {
results.forEach(result => {
console.log(`下载结果: ${result.url}`);
console.log(`文件名: ${result.file_name}`);
console.log(`状态码: ${result.code}`);
console.log(`文件大小: ${result.size}`);
console.log(`是否支持断点续传: ${result.resumable}`);
if (result.error) {
console.error(`错误信息: ${result.error}`);
}
});
})
.catch((error) => {
console.error('下载失败:', error);
});
查询下载进度
- 函数签名:
download_look(timeout: number): DownloadProgress
- 描述: 在给定超时时间内查询当前下载任务的进度。
示例
// 假设我们正在监控某个下载任务
const progress = ssf.Request.download_look(1000); // 每秒检查一次
console.log(`文件名: ${progress.filename}`);
console.log(`已下载大小: ${progress.current_size} 字节`);
console.log(`总大小: ${progress.total_size} 字节`);