使用 fetch() 代理 HTTP 请求
在 Bun 中,fetch 支持通过 HTTP 或 HTTPS 代理发送请求。在企业网络中,或请求必须来自特定 IP 地址时,可以使用此功能。
await fetch("https://example.com", {
// 代理服务器的 URL
proxy: "https://username:password@proxy.example.com:8080",
});
proxy 选项可以是 URL 字符串、URL 实例,或包含 url(字符串或 URL)以及可选 headers 的对象。如果代理需要身份验证,URL 可以包含用户名和密码。代理协议可以是 http:// 或 https://。
自定义代理请求头
要向代理服务器发送自定义请求头(用于代理身份验证令牌或自定义路由),请使用对象格式:
await fetch("https://example.com", {
proxy: {
url: "https://proxy.example.com:8080",
headers: {
"Proxy-Authorization": "Bearer my-token",
"X-Proxy-Region": "us-east-1",
},
},
});
headers 属性接受普通对象或 Headers 实例。Bun 会在 CONNECT 请求(针对 HTTPS 目标)或代理请求(针对 HTTP 目标)中,将这些请求头直接发送到代理服务器。
如果提供 Proxy-Authorization 请求头,它会覆盖代理 URL 中的任何凭据。
环境变量
要对所有请求使用同一个代理,请将 $HTTP_PROXY 和 $HTTPS_PROXY 环境变量设为代理 URL。Bun 仅对 http:// URL 的请求使用 $HTTP_PROXY,仅对 https:// URL 的请求使用 $HTTPS_PROXY,因此请同时设置二者,以便通过代理发送所有请求。
terminal
HTTP_PROXY=https://username:password@proxy.example.com:8080 HTTPS_PROXY=https://username:password@proxy.example.com:8080 bun run index.ts
如果未设置特定协议的变量,$ALL_PROXY 会同时应用于这两种 URL。$NO_PROXY 列出了绕过代理的主机。语法请参阅代理请求。
要在单个请求中忽略这些变量,请传入 proxy: false:
await fetch("https://example.com", { proxy: false });