如何使用axios和socks代理下载文件
How to download file using axios and socks proxy agent
所以我打算在nodejs中使用axios和socks代理下载一个文件。
当然,只用axios的时候下载是成功的。
但是如果在axios初始化的时候加入了socks proxy代理就不行了
下面是下载功能的代码
async function downloadFile(fileUrl, outputLocationPath, proxy_agent) {
const writer = fs.createWriteStream(outputLocationPath);
const client = axios.create({
baseURL: fileUrl,
responseType: 'stream',
httpsAgent: proxy_agent,
httpAgent: proxy_agent
});
const response = await client.get();
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
}
当我使用 fileURL 就像 json 对象 link 例如“https://myip.wtf/json”时,它真的获取代理服务器的 ip 地址并将其保存到一个文件。
但是当我指定其他 url 时,会显示套接字挂起错误。
我不明白为什么会这样。 JSON 请求工作正常,但在普通文件请求的情况下不行。
请帮我。
谢谢
Axios 将根据文档单独接受代理对象
你能试试吗:https://github.com/axios/axios/blob/ee151a7356ec4498af045dd830312822637890c9/README.md?plain=1#L446
例如(代码):
const client = axios.create({
baseURL: fileUrl,
responseType: 'stream',
httpsAgent: proxy_agent,
httpAgent: proxy_agent
},
proxy: {
protocol: '<protocol>',
host: '<host>',
port: <port as number>,
auth: {
username: '<uname>',
password: '<psdw>'
}
}
);
我不明白为什么这会解决问题,但无论如何我已经通过在初始化代理选项中将“socks5”替换为“socks”来解决问题。
所以我首先使用的是下面;
/* initialize proxy configuration */
const proxy_host = "127.0.0.1", proxy_port = 1080;
const proxy_options = `socks5://${proxy_host}:${proxy_port}`;
const proxy_agent = new SocksProxyAgent(proxy_options);
这曾经导致连接超时错误,但是当我将 socks5 更改为 socks 时,它起作用了。
原来的袜子(socks4)和现代的socks5有明显的区别,一定要声明清楚,不是吗?
我不知道为什么 npm socks-proxy-agent 的开发者没有公布这个问题,好奇怪。
在使用带有 curl 命令的 socks 代理时,我们仍然需要编写正确的协议,google-chrome,等等
希望对大家使用这个npm有所帮助,注意这一点:)
所以我打算在nodejs中使用axios和socks代理下载一个文件。 当然,只用axios的时候下载是成功的。 但是如果在axios初始化的时候加入了socks proxy代理就不行了
下面是下载功能的代码
async function downloadFile(fileUrl, outputLocationPath, proxy_agent) {
const writer = fs.createWriteStream(outputLocationPath);
const client = axios.create({
baseURL: fileUrl,
responseType: 'stream',
httpsAgent: proxy_agent,
httpAgent: proxy_agent
});
const response = await client.get();
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
}
当我使用 fileURL 就像 json 对象 link 例如“https://myip.wtf/json”时,它真的获取代理服务器的 ip 地址并将其保存到一个文件。 但是当我指定其他 url 时,会显示套接字挂起错误。 我不明白为什么会这样。 JSON 请求工作正常,但在普通文件请求的情况下不行。 请帮我。 谢谢
Axios 将根据文档单独接受代理对象
你能试试吗:https://github.com/axios/axios/blob/ee151a7356ec4498af045dd830312822637890c9/README.md?plain=1#L446
例如(代码):
const client = axios.create({
baseURL: fileUrl,
responseType: 'stream',
httpsAgent: proxy_agent,
httpAgent: proxy_agent
},
proxy: {
protocol: '<protocol>',
host: '<host>',
port: <port as number>,
auth: {
username: '<uname>',
password: '<psdw>'
}
}
);
我不明白为什么这会解决问题,但无论如何我已经通过在初始化代理选项中将“socks5”替换为“socks”来解决问题。
所以我首先使用的是下面;
/* initialize proxy configuration */
const proxy_host = "127.0.0.1", proxy_port = 1080;
const proxy_options = `socks5://${proxy_host}:${proxy_port}`;
const proxy_agent = new SocksProxyAgent(proxy_options);
这曾经导致连接超时错误,但是当我将 socks5 更改为 socks 时,它起作用了。
原来的袜子(socks4)和现代的socks5有明显的区别,一定要声明清楚,不是吗? 我不知道为什么 npm socks-proxy-agent 的开发者没有公布这个问题,好奇怪。 在使用带有 curl 命令的 socks 代理时,我们仍然需要编写正确的协议,google-chrome,等等
希望对大家使用这个npm有所帮助,注意这一点:)