如何通过代理发送 fetch() 请求?

Sam*_*oto 5 javascript web

我有一个 HTTP 代理,我想代理来自浏览器客户端应用程序的所有 HTTP 请求。

在命令行上,我可以通过以下方式代理请求:

curl https://code.sgo.to --proxy localhost:5555
Run Code Online (Sandbox Code Playgroud)

或这个:

var http = require("http");

var options = {
  host: "proxy",
  port: 8080,
  path: "http://www.google.com",
  headers: {
    Host: "www.google.com"
  }
};
http.get(options, function(res) {
  console.log(res);
  res.pipe(process.stdout);
});
Run Code Online (Sandbox Code Playgroud)

但是,在客户端上,path似乎并不是真正有效的path. 例如

fetch("http://localhost:5555http://code.sgo.to")
Run Code Online (Sandbox Code Playgroud)

看起来不太对劲。但

fetch("http://localhost:5555/http://code.sgo.to")
Run Code Online (Sandbox Code Playgroud)

破坏了我的标准代理,因为路径中有一个额外的内容/,它期望传递一个 URL。

有人知道浏览器中的等效项是什么(例如 throughfetch()或 through XMLHttpRequest)吗?

Eve*_*ert -2

浏览器不允许你这样做。

  • 如果代理设置为使用/接受 http 请求并使用该请求的路径作为代理的目标,则可以通过这种方式完成。这就是为什么他们在nodejs中的http请求会起作用。例如,这就是 cors 代理服务的工作方式。 (2认同)