如何像 cURL 一样通过 javascript fetch-api 在 Cloudflare Worker 中使用代理?

问题描述 投票:0回答:1

我尝试通过对代理服务器的 GET 请求在 Cloudflare Worker 中使用代理。该请求在 cURL 中有效,但在 Worker 中无效。

在过去的几天里,我一直在尝试在 Cloudflare Workers 中构建一个 Web 服务。我需要通过代理发出 GET 请求。经过一番研究,我了解到 Worker 的 fetch 功能不支持使用代理,并且不允许我下载使用代理所需的 npm 包。

了解后,我决定尝试另一种方法:使用我想要的主机向代理服务器发出 GET 请求。

所以我想出了一个有效的 cURL 命令:

curl -verbose <proxy_url:proxy_port> -H "Proxy-Authorization: Basic <token_here>" -H "host: ipinfo.io"
它成功了!我从 ipinfo.io 获取代理的 IP 地址作为响应。

然后我写了这段代码,它基本上发送了与 cURL 命令相同的请求。

export default {
    async fetch(request, env, ctx) {
        return await fetch("<proxy_url>:<proxy_port>", {
            method: "GET",
            headers: {
                "Host": "ipinfo.io",
                "Proxy-Authorization": "Basic <token_here>",
            },
        });
    },
};

当我在本地网络上运行工作程序时,我得到了以下结果:

的访问受到防火墙的限制。如果您认为这是错误的,请通过聊天联系支持人员。 request_uuid:

我说什么并部署了工作程序,这一次当我尝试连接到工作程序时,它只是说“此页面无法工作”,HTTP 代码为 521。

我还尝试使用 Chrome Restman 扩展发送相同的请求,它也返回了与工作人员相同的防火墙错误。

所以这个请求只在 cURL 中有效,我不知道为什么。

作为最后的努力,我使用 -verbose 选项检查了 cURL 命令的请求标头。并在worker中相应地设置它们。

export default {
    async fetch(request, env, ctx) {
        return await fetch("<proxy_url>:<proxy_port>", {
            method: "GET",
            headers: {
                "Host": "ipinfo.io",
                "User-Agent": "curl/7.81.0",
                "Accept": "*/*",
                "Referer": "rbose",
                "Proxy-Authorization": "<token_here>",
            },
        });
    },
};

结果保持不变。

是否可以在工作人员中重新创建此 cURL 请求?或者还有其他在 Worker 中使用代理的解决方案吗?

提前致谢。

javascript curl fetch-api http-proxy cloudflare-workers
1个回答
0
投票

要使用http代理服务器,您需要在curl中使用-x选项

示例

curl -x http://<proxy_url>:<proxy_port> ipinfo.io
© www.soinside.com 2019 - 2024. All rights reserved.