使用axios发送请求时如何设置代理?

sr4lhrrt  于 2022-11-05  发布在  iOS
关注(0)|答案(5)|浏览(629)

我正在使用一个名为“concurrently”的包在localhost上同时运行我的客户端和服务器。客户端在端口3000上运行,而服务器在端口5000上运行。我在服务器的package.json中以以下方式设置了代理:

"proxy": "https://localhost:5000"

但当我以下列方式向客户提出请求时:

const config = {
        headers: {
          'Content-Type': 'application/json'
        }
      };

    const res = await axios.post('/api/users', body, config);

它说:POST http://localhost:3000/api/users 404 (Not Found)。我不明白为什么,但尽管设置了代理,axios仍然向端口3000而不是端口5000发出请求。这是什么问题?

wpx232ag

wpx232ag1#

我只想说,添加cors的解决方案并不是一个解决方案。你需要在package.json中包含代理"proxy" : "https://localhost:5000",你可能需要重新启动或者其他什么--但是如果你选择使用cors,你就允许任何人访问你的API。这意味着你的数据库是完全开放的,人们可以随意查看。密码、电子邮件、用户等等。这一切都是危险的。

nsc4cvqm

nsc4cvqm2#

我把它修好了。我做的是:
1)将axios.post('/api/users', body, config);更改为axios.post('http://localhost:5000/api/users', body, config);
2)然后在'users'服务器端的快速路由中,通过安装'cors' npm包来添加CORS功能,然后添加以下行:

const router = express.Router();
...
// add these lines
var cors = require('cors');
router.use(cors()); 
...
router.post('/', async (req, res) => {
...
});
zf2sa74q

zf2sa74q3#

据我所知,您需要的是参考Axios开发人员文档。

import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';
   const agent = tunnel.httpsOverHttp({
   proxy: {
     host: 'proxy.mycorp.com',
     port: 8000,
    },
   });
const axiosClient: AxiosInstance = axios.create({
baseURL: 'https://some.api.com',
httpsAgent: agent,
});
svujldwt

svujldwt4#

在我的例子中,我没有检查好,它似乎是调用实际上被转发到代理地址的api服务器。检查服务器是否正在运行,它是否正在接收您的调用。

epggiuax

epggiuax5#

当我发送请求到一个代理服务器时,我代码运行的很成功。2我希望这个答案对你或者其他人有用。

const axios = require("axios");
const cheerio = require('cheerio');

async function sendRequestWithProxy() {
    let proxyServer = {
        "host" : "YOUR_PROXY_HOST",
        "port" : "YOUR_PROXY_PORT",
        "username" : "YOUR_PROXY_USERNAME",
        "password" : "YOUR_PROXY_PASSWORD"
    };
    var ProductUrl = "http://YOUR_REQUEST_URL";
    await axios.get(ProductUrl, {
        proxy: {
            host: proxyServer.host,
            port: proxyServer.port,
            auth: {username: proxyServer.username, password: proxyServer.password}
        },
        headers: {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36',            }
    }).then((response) => {
    const $ = cheerio.load(response.data);
    let productInfo = $("#HTML_ID_ATTRIBUTE").text();
        ///YOUR CODE
    }).catch(function (error) {
        if (error.response) {
            //ERROR AREA
            console.log(error.response.data);
            console.log(error.response.status);
            console.log(error.response.headers);
        }
    });
}

相关问题