407 Proxy Authentication Required
检查 代理收到了请求,但不接受账号密码。看 ProxySettings 或 proxy 字典里是不是真的带了 username 和 password,是否和「我的资产」里的一致,端口是否对应所选协议。
处理 改对账号密码;Chromium 里用 HTTP 端口(2222)。写进地址时,特殊字符要做百分号编码。
Browser Use 会替 AI Agent 开一个浏览器。想让这个浏览器通过代理访问网页,只要在 Browser 对象上设置一次。本文讲当前版本的写法、一个 Agent 一个代理、Playwright 和 Playwright MCP 的对应写法、时区和语言怎么对上,以及常见报错。
Browser Use 把代理作为浏览器的一个参数:proxy 接收一个 ProxySettings 对象,包含 server、username、password 和 bypass。Browser 是 BrowserSession 的别名,所以 Browser(proxy=...) 就是全部设置。
很多旧教程里的 BrowserConfig 是旧版本才有的,当前 API 里没有,代码里导入它会报 ImportError。请改用下面的写法。
import asyncio
import os
from browser_use import Agent, Browser, ChatOpenAI
from browser_use.browser.profile import ProxySettings
browser = Browser(
proxy=ProxySettings(
server=f"http://{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}", # HTTP endpoint
username=os.environ["PROXY_USER"],
password=os.environ["PROXY_PASS"],
bypass="localhost,127.0.0.1", # optional
)
)
async def main():
agent = Agent(
task=(
"Open https://ipinfo.io/json and report the IP address and country it shows. "
"Then continue with the real task."
),
llm=ChatOpenAI(model=os.environ["LLM_MODEL"]),
browser=browser,
)
history = await agent.run()
print(history.final_result())
asyncio.run(main())仅为示例:环境变量请换成你自己的值。任务里先让 Agent 报出出口 IP 和国家,再做别的事。
第一步让「代理配好了」变成「Agent 的浏览器确实显示我选的国家」。每次运行开头都做一次,并把报出的国家和你生成代理时选的国家对一下。
bypass 是不走代理的主机列表,用逗号隔开,比如 localhost,127.0.0.1。用不上可以不写。
给每个 Agent 各建一个 Browser,各带自己的 ProxySettings,再用 asyncio.gather 一起跑。代理跟着它所属的浏览器走,所以两个 Agent 不会不小心共用同一个出口。Browser Use 官方的并行示例标注为实验性,所以请保持一个 Agent 对应一个 Browser 对象。
import asyncio
import os
from browser_use import Agent, Browser, ChatOpenAI
from browser_use.browser.profile import ProxySettings
def make_browser(host_env, port_env, user_env, pass_env):
return Browser(
proxy=ProxySettings(
server=f"http://{os.environ[host_env]}:{os.environ[port_env]}",
username=os.environ[user_env],
password=os.environ[pass_env],
)
)
async def run_one(task, browser):
agent = Agent(task=task, llm=ChatOpenAI(model=os.environ["LLM_MODEL"]), browser=browser)
return await agent.run()
async def main():
de = make_browser("DE_HOST", "DE_PORT", "DE_USER", "DE_PASS")
jp = make_browser("JP_HOST", "JP_PORT", "JP_USER", "JP_PASS")
results = await asyncio.gather(
run_one("Open https://ipinfo.io/json and report the IP and country", de),
run_one("Open https://ipinfo.io/json and report the IP and country", jp),
)
for history in results:
print(history.final_result())
asyncio.run(main())仅为示例:请换成你自己的值。
Browser Use 底层通过 Playwright 驱动 Chromium,所以 Playwright 自己的代理选项值得了解。代理可以在 launch 时设给整个浏览器,也可以在 new_context(Node.js 里是 newContext)时只设给一个上下文,选项有 server、bypass、username、password。
Playwright 选项文档说明,username 和 password 用于 HTTP 代理。所以带账号密码的 SOCKS5 在 Chromium 里不可用:请用 HTTP 端口。Proxy302 上是 proxy.proxy302.com 的 2222 端口;SOCKS5 是 3333 端口。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# Proxy for the whole browser
browser = p.chromium.launch(
proxy={
"server": "http://HOST:PORT",
"username": "USERNAME",
"password": "PASSWORD",
"bypass": "localhost,127.0.0.1",
}
)
page = browser.new_page()
page.goto("https://ipinfo.io/json")
print(page.inner_text("body"))
browser.close()
# Or one proxy per context
browser = p.chromium.launch()
context = browser.new_context(
proxy={"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}
)
page = context.new_page()
page.goto("https://ipinfo.io/json")
print(page.inner_text("body"))
browser.close()仅为示例:请换成你自己的值。
import { chromium } from 'playwright';
// Proxy for the whole browser
const browser = await chromium.launch({
proxy: {
server: 'http://HOST:PORT',
username: 'USERNAME',
password: 'PASSWORD',
bypass: 'localhost,127.0.0.1',
},
});
const page = await browser.newPage();
await page.goto('https://ipinfo.io/json');
console.log(await page.innerText('body'));
await browser.close();
// Or one proxy per context
const browser2 = await chromium.launch();
const context = await browser2.newContext({
proxy: { server: 'http://HOST:PORT', username: 'USERNAME', password: 'PASSWORD' },
});
const page2 = await context.newPage();
await page2.goto('https://ipinfo.io/json');
console.log(await page2.innerText('body'));
await browser2.close();仅为示例:请换成你自己的值。
如果你不写 Python 代码,而是通过 Playwright MCP 服务器驱动浏览器,对应的参数是 --proxy-server 和 --proxy-bypass。官方 README 把账号密码写在代理地址里:http://user:password@host:port。密码里有 @、:、/ 这类特殊字符时,要做百分号编码。
README 里也列了 SOCKS5 的写法,但和上面的 Playwright 一样,需要账号密码时请用 HTTP 端口。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--proxy-server",
"http://USER:PASS@HOST:PORT",
"--proxy-bypass",
"localhost,127.0.0.1"
]
}
}
}仅为示例:请换成你自己的值。
如果只是想让 Agent 通过 Proxy302 代理读一个公开网页、不需要开浏览器,可以看 proxy-mcp-server 指南。proxy302-mcp 是 Proxy302 官方的 MCP 服务,在 GitHub 开源,由 Proxy302 团队维护。Proxy302 也在 https://proxy302.com/v1/mcp 托管了一份:Claude Code、Cursor、VS Code 这类能带 Authorization 请求头的客户端,填 API 密钥就能连,不用安装。
有些网站会根据访客所在地区显示不同的货币、语言和运费说明。想看到页面的本地版,除了代理,还要把浏览器的语言和时区设成出口地区。
Playwright 里对应的上下文选项是 locale(语言标签,如 de-DE)和 timezone_id(时区 ID,如 Europe/Berlin;Node.js 里叫 timezoneId),都写在官方选项里。它们改变的是浏览器报告的内容,代理改变的是地址。
context = browser.new_context(
proxy={"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"},
locale="de-DE",
timezone_id="Europe/Berlin",
)仅为示例:请换成你自己的值。
const context = await browser.newContext({
proxy: { server: 'http://HOST:PORT', username: 'USERNAME', password: 'PASSWORD' },
locale: 'de-DE',
timezoneId: 'Europe/Berlin',
});仅为示例:请换成你自己的值。
| 项目 | 网络(ISP) | ASN | 响应,毫秒 |
|---|---|---|---|
| 美国 | AT&T Enterprises, LLC | AS7018 | 1807 |
| 英国 | Plusnet | AS6871 | 2563 |
| 德国 | Vodafone GmbH | AS3209 | 1058 |
| 日本 | BTV CO.,LTD. | AS18135 | 1548 |
| 新加坡 | Starhub Ltd | AS55430 | 629 |
| 俄罗斯 | PJSC Vimpelcom | AS8402 | 2031 |
| 巴西 | TELEFÔNICA BRASIL S.A | AS26599 | 6263 |
| 印度尼西亚 | PT. Telekomunikasi Selular | AS23693 | 1752 |
Proxy302 每小时连通性检查,2026 年 11 月 3 日 18:18 UTC:每个国家通过动态住宅出口向亚马逊发一次请求。IP 只公开前三段。每个国家只有一个样本,不是平均值,之后的检查结果会不同。
检查 代理收到了请求,但不接受账号密码。看 ProxySettings 或 proxy 字典里是不是真的带了 username 和 password,是否和「我的资产」里的一致,端口是否对应所选协议。
处理 改对账号密码;Chromium 里用 HTTP 端口(2222)。写进地址时,特殊字符要做百分号编码。
检查 浏览器根本连不上代理。看主机和端口对不对,协议头是不是 http://,有没有别的代理设置叠在上面。
处理 改对主机、端口或协议头,再跑一次出口检查。在中国大陆请开着辅助工具(见下面的步骤)。
检查 不走代理能打开、走代理就超时,问题多半在代理这条路或页面本身,不在你的代码。换一个出口国家试同一个请求。
处理 慢页面把导航超时调大,并换更近的国家重试。
检查 出口可能和你选的不一样,或者浏览器的时区和语言与出口地区不一致。正式任务前再跑一次 IP 查询任务。
处理 按出口国家设 locale 和 timezone_id;多步骤任务用静态 IP。
常见用途是读取公开网页、查看页面在其他地区的样子、本地化网站的 QA,以及在遵守网站条款和访问频率限制的前提下采集数据。代理只改变网站看到的网络地址;请求频率要克制,并遵守各网站的规则。
动态住宅适合要读很多页面、或要查看多个地区的 Agent:选国家、生成 HTTP 协议的代理,用 proxy.proxy302.com 的 2222 端口。要登录账号、需要一个固定地址的 Agent,用静态 ISP IP。产品详情见动态住宅页面。
打开动态住宅页面(或静态 ISP 页面),选国家和 HTTP 协议,生成代理。
打开「我的资产」(控制台里放你所有已购商品的页面),复制 HOST、PORT、USERNAME、PASSWORD。「连接」页有带你自己地址的现成示例。
把它们填进 ProxySettings、Playwright 的 proxy 选项或 MCP 参数里。
做出口检查:让 Agent 打开 https://ipinfo.io/json,报出 IP 和国家,国家应与你选的一致。
在中国大陆,从「连接」页打开辅助工具,点「一键加速」,使用代理期间保持开着。
动态住宅经济线每 GB 1.5 美元起,优质线每 GB 5 美元,买大流量包更便宜。静态 ISP IP 1 天 0.5 美元,30 天 7.99 美元。没有免费试用:最小一单是 1 GB 流量或一个 IP 用 1 天。代理不能解除限制、恢复被封的账号或提高额度。
| 项目 | 价格 | 协议 | 地区 | 适合的 Agent 工作 |
|---|---|---|---|---|
| 动态住宅 | 经济线每 GB 1.5 美元起,优质线每 GB 5 美元;买大流量包单价更低 | HTTP、SOCKS5 | 195 个以上国家和地区,支持的线路可选州和城市 | 浏览、调研类 Agent,数据采集 |
| 静态 ISP(按 IP) | 1 天 0.5 美元,30 天 7.99 美元,各国同价 | HTTP 或 SOCKS5,每个 IP 购买时选定 | 下单页列出 30 个国家,库存每天变化 | 要登录账号的 Agent:一个账号配一个固定 IP |
| AI 订阅专用 ISP | 每 30 天:Claude 15 PTC,GPT / Grok 10 PTC,Gemini 8 PTC;每档首单 5 折 | HTTP 或 SOCKS5 | Claude:美国、英国、德国、西班牙、日本、新加坡;GPT / Grok 和 Gemini:美国、英国、法国、西班牙、意大利、日本、韩国、新加坡 | 登录 ChatGPT、Claude、Gemini、Grok 账号的编程工具和 Agent |
| 机房 IP(按 IP) | 1 天 0.25 美元,30 天 3.99 美元 | HTTP 或 SOCKS5,每个 IP 购买时选定 | 8 个国家 | 只调接口、不在意 IP 类型的流量 |
| proxy302-mcp | 免费、开源(MIT 协议) | MCP,本地 stdio,用 npx 启动 | 用的是上面这些产品 | 让 Claude Code、Codex、Cursor 等 MCP 客户端拿代理、通过代理打开网页 |
价格按 PTC 从钱包扣,1 PTC = 1 美元。没有免费试用:最小一单是 1 GB 动态住宅流量,或一个 IP 用 1 天。核对于 2026-11-04。
有。给 Browser 传 proxy=ProxySettings(server, username, password, bypass) 即可。BrowserConfig 是旧版本的,当前 API 里没有。
每个 Agent 建一个 Browser,各带自己的 ProxySettings,再用 asyncio.gather 一起跑。
不能。Playwright 的 username 和 password 选项用于 HTTP 代理,所以请用 HTTP 端口(proxy.proxy302.com 的 2222)。
任务里的页面属于同一次访问(比如登录加几步操作)时,用一个固定 IP。彼此独立的单页读取,每个任务换一个 IP 更简单。
先查出口 IP。再把上下文的 locale 和 timezone_id 设成出口地区,它们决定浏览器报告的内容。
官方文档 · 确认日期:
Read on 4 November 2026: the proxy parameter takes ProxySettings(server, bypass, username, password); Browser is an alias for BrowserSession; BrowserProfile can be passed to Browser.
官方文档 · 确认日期:
Source read on 4 November 2026: class ProxySettings has server, bypass, username and password; BrowserProfile.proxy; the current package exports Browser and BrowserSession and has no BrowserConfig.
官方文档 · 确认日期:
Read on 4 November 2026: proxy can be set for the whole browser in launch or for each context; username and password for HTTP(S) proxy.
官方文档 · 确认日期:
Read on 4 November 2026: server, bypass, username, password; username and password are for HTTP proxy authentication.
官方文档 · 确认日期:
Read on 4 November 2026: locale, timezone_id and proxy options of new_context.
官方文档 · 确认日期:
Read on 4 November 2026: locale and timezoneId in browser.newContext; they affect the browser's locale and time zone only.
官方文档 · 确认日期:
Read on 4 November 2026: --proxy-server (including the http://user:password@host:port form) and --proxy-bypass.
产品观察 · 确认日期:
Product facts file of the site (values checked against the console, the backend and the price table on 18-19 October 2026): products, prices in US$ (1 PTC = US$1), lease terms, protocols and ports, countries, quantity limits, no free trial.
产品观察 · 确认日期:
Public JSON at proxy302.com/v1/proxy/ai-isp/catalog, read 4 November 2026: three tiers (Claude, GPT / Grok, Gemini), price per 30 days in PTC, 50% off the first order in a tier, cities by country.
产品观察 · 确认日期:
Proxy302 官方 MCP 服务的 README:安装命令、环境变量、七个工具、只读不花钱的范围,以及托管地址 https://proxy302.com/v1/mcp。
产品观察 · 确认日期:
Public JSON of the probe at proxy302.com/live/connectivity/amazon.json (file probe-amazon-20261104.json), generated 3 November 2026, 18:18 UTC: one request per exit country through a rotating residential exit; exit ASN, network and response time.
注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。