【问题标题】:node-fetch responding with 503 where request responding with 200 behind proxynode-fetch 以 503 响应,其中请求以 200 在代理后面响应
【发布时间】:2018-05-22 02:43:57
【问题描述】:

下面我有两个 http 请求,一个是用 request 发出的,另一个是用 isomorphic-fetch (node-fetch) 发出的。出于某种原因,带有request 的请求有效,但是node-fetch 以错误代码503 回复。 fetch 版本中我缺少什么吗?

const URL = require('url')
const fetch = require('isomorphic-fetch')
const HttpsProxyAgent = require('https-proxy-agent')
const request = require('request');

const url = process.env.URL
const proxy = process.env.PROXY

const requestPromise = function (url, options) {
    if (/^\/\//.test(url)) {
    url = 'https:' + url;
    }

    return new Promise(function(resolve, reject) {
        return request.call(this, url, options, function (err, res, body) {
            if (err) {
            throw new Error(err);
            }

            res.ok = true;
            res.json = function () {
            return JSON.parse(res.body);
            }
            return resolve(res);
        });
    });
};

function getProxy (url) {
    const parsedProxyURL = URL.parse(url);
    parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:';
    return parsedProxyURL
}

requestPromise(url, {
    agent:new HttpsProxyAgent(getProxy(proxy))
})
    .then(console.log)
    .catch(console.log)


fetch(url, {
    agent:new HttpsProxyAgent(getProxy(proxy))
})
    .then(console.log)
    .catch(console.log)

【问题讨论】:

标签: javascript node.js proxy request fetch


【解决方案1】:

request 模块似乎自动设置了一个标头,host fetch 模块没有。通过进行此更改,它会起作用。

const URL = require('url')
const fetch = require('isomorphic-fetch')
const HttpsProxyAgent = require('https-proxy-agent')
const request = require('request')

function getProxy (url) {
    const parsedProxyURL = URL.parse(url)
    parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:'
    return parsedProxyURL
}

const url = process.env.URL
const proxy = process.env.PROXY

fetch(url, {
    headers: {host: URL.parse(url).host},
    agent: new HttpsProxyAgent(getProxy(proxy))
})
    .then(res => res.json()).then(res => {
        console.log(res)
    })
    .catch(console.log)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多