使用 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 });