Задать вопрос
Login8
@Login8
Программист, критик, наватор

Почему не работают запросы через прокси в axios или fetch в nodejs?

Здравствуйте уважаемые знатоки.
В первые столкнулся с надобностью отправить http запрос через прокси из nodejs но понял что это не такая простая задача.

Неработает ни на винде 10 ни на дебиан.

Чуть ниже представлен код который я пытался заставить работать и там же в комментарии
Сразу скажу что прокси которые я использовал 100% рабочие.

Node.js v18.20.6

///////// axois ///////////

const axios = require('axios');

axios.get('https://www.httpbin.org/ip', {
	'responseType': 'text',
	'timeout':120000, 
	'proxy': {
		'protocol': 'http',
		'host': 'x.x.x.x', // подставте свой прокси хост
		//'hostname': 'x.x.x.x', // <--- пробовал раскомментить эту строку а верхнюю закомментить, не помогло, пробовал обе раскомментить, не помогло
		'port': 0000, // подставте свой прокси порт
		'auth': {
			'username': 'username', // подставте свой прокси username
			'password': 'password' // подставте свой прокси password
		}
	}
})
.then((res) => { console.log('res.data:', res.data) })
.catch((err) => {
	if (err.response) {
		console.log('err.response.data:', err.response.data);
	}else if(err.request){
		console.log('err.request:', err.request);
	}else{
		console.log('err.message:', err.message);
	}
});

// Ответ (если в "protocol" подставить "http")
/* err.response.data: <html><head><title>400 Bad Request</title></head>
<body><h2>400 Bad Request</h2></body></html>
*/

// Ответ (если в "protocol" подставить не "http" а "https")
/*
err.request: <ref *2> Writable {
  _writableState: WritableState {
    objectMode: false,
    highWaterMark: 16384,
    finalCalled: false,
    needDrain: false,
    ending: false,
    ended: false,
    finished: false,
    destroyed: false,
    decodeStrings: true,
    defaultEncoding: 'utf8',
    length: 0,
    writing: false,
    corked: 0,
    sync: true,
    bufferProcessing: false,
    onwrite: [Function: bound onwrite],
...
}
*/

//////////////////////////////////////////////////////////////////////////////////////////

///////// fetch /////////

const { HttpsProxyAgent } = require('https-proxy-agent');

var proxy_url = 'http://username:password@x.x.x.x:0000'; // подставьте свои значения для прокси. Кстати если вместо "http://" вписать "https://" непомогает
var proxy_agent = new HttpsProxyAgent(proxy_url);

(async () => {
var response = await fetch('https://www.httpbin.org/ip', {
  agent: proxy_agent,
});
var data = await response.text();
console.log('DATA:', data);
})();

// Ответ (показывает мой собственный ip либо ip машины т.е. если запускать код из vds какого нибудь )
/* DATA: {
  "origin": "178.121.31.147"
} */


У кого какие буду идеи?
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы