Использование rejectUnaавторизовано с помощью функции node-fetch в node.js - PullRequest
0 голосов
/ 04 февраля 2020

В настоящее время я использую запрос для выполнения http-запросов в node.js. В какой-то момент я столкнулся с проблемой, когда я получал ошибки, которые указывали на UNABLE_TO_GET_ISSUER_CERT_LOCALLY. Чтобы обойти это он установил rejectUnauthorized. Мой рабочий код с запросом выглядит следующим образом:

    var url = 'someurl';
    var options = {
        url: url,
        port: 443,
        // proxy: process.env.HTTPS_PROXY, -- no need to do this as request honors env vars
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
            'Accept-Language': 'en-us',
            'Content-Language': 'en-us'
        },
        timeout: 0,
        encoding: null,
        rejectUnauthorized: false // added this to prevent the UNABLE_TO_GET_ISSUER_CERT_LOCALLY error
    };
    request(options, function (err, resp, body) {
        if (err) reject(err);
        else resolve(body.toString());
    });

Я думал, что попробую переключиться на API выборки, используя async / await, и сейчас пытаюсь использовать node-fetch, чтобы сделать то же самое. Однако, когда я делаю то же самое, я возвращаюсь к ошибкам UNABLE_TO_GET_ISSUER_CERT_LOCALLY. Я прочитал, что мне нужно использовать прокси-агент, и попытался использовать модуль прокси-агента, но мне все еще не повезло.

Исходя из сообщения https://github.com/TooTallNate/node-https-proxy-agent/issues/11 Я думал, что будет работать следующее:

    var options = {
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
            'Accept-Language': 'en-us',
            'Content-Language': 'en-us'
        },
        timeout: 0,
        encoding: null
    };
    var proxyOptions = nodeurl.parse(process.env.HTTPS_PROXY);
    proxyOptions.rejectUnauthorized = false;
    options.agent = new ProxyAgent(proxyOptions);
    const resp = await fetch('someurl', options);
    return await resp.text();

, но я все еще получаю ту же ошибку. До сих пор единственный способ, которым я смог обойти это с помощью node-fetch, это установить NODE_TLS_REJECT_UNAUTHORIZED = 0 в моей среде, что я на самом деле не хочу делать. Может кто-нибудь помочь мне показать, как заставить rejectUnauthorized работать с извлечением узла (предположительно, с использованием агента, но мне, честно говоря, все равно, сколько это указано в части запроса).

...