只设置了 http 键
键名指的是目标的协议,而不是代理的协议。只有 http 的字典会让普通 HTTP 走代理,而所有 HTTPS 调用都会直接发出,且没有任何错误提示。
简而言之: 传入一个同时包含 http 和 https 两个键的 proxies 字典,两个键都设为 http://USERNAME:PASSWORD@HOST:PORT,requests 就会通过代理发送请求;HTTPS 目标以隧道方式经过代理。如需 SOCKS5,请安装 requests[socks],在订单上把代理切换为 SOCKS5,并使用 socks5h 协议,这样主机名由代理解析,而不是由您的机器解析。
Python requests 从一个字典中读取代理,这个字典把目标 URL 的协议映射到代理 URL。本指南为一个静态 ISP 地址设置这个字典,并展示它可以放在的三个位置:调用中、会话中或环境中。
大多数代理(包括我们的)都要求用户名和密码。requests 从代理 URL 中读取它们,并在每次连接时发送给代理。对于 HTTPS 目标,代理会打开一条隧道,永远看不到请求的内容。代码标签页展示了按请求和按会话两种写法。
主机、端口、用户名和密码,来自控制台的“我的代理”或 API 中的订单。每个地址都有自己的四个值,没有共享网关。
http://USERNAME:PASSWORD@HOST:PORT。如果密码包含 /、?、# 或 %,请先用 urllib.parse.quote(password, safe="") 对其进行 URL 编码。
把同一个 URL 同时交给 http 键和 https 键。如果只设置了 http,所有 HTTPS 请求都会绕过代理,从您自己的地址发出。
请求一个显示调用方 IP 的页面,或通过同一个代理打开“我的 IP 是什么”,确认显示的是您购买的地址。
务必传入 timeout=:requests 默认会无限等待,连接卡住时脚本看起来就像挂起了。
import requests
# The four values come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"
response = requests.get(
"https://example.com/",
proxies={"http": proxy, "https": proxy},
timeout=30,
)
response.raise_for_status()
print(response.status_code)
import requests
proxy = "http://USERNAME:PASSWORD@HOST:PORT"
with requests.Session() as session:
# HTTP_PROXY / HTTPS_PROXY in the environment would override
# session.proxies; this makes the session use only its own setting.
session.trust_env = False
session.proxies.update({"http": proxy, "https": proxy})
response = session.get("https://example.com/", timeout=30)
response.raise_for_status()
print(response.status_code)
# pip install "requests[socks]"
import requests
# Switch the proxy to SOCKS5 first; use the values the order then shows.
# socks5h: the proxy resolves the hostname, not your machine.
proxy = "socks5h://USERNAME:PASSWORD@HOST:PORT"
response = requests.get(
"https://example.com/",
proxies={"http": proxy, "https": proxy},
timeout=30,
)
response.raise_for_status()
print(response.status_code)
每个示例都通过带用户名和密码的 HTTP 代理连接,SOCKS5 示例除外:它需要先把代理切换为 SOCKS5,之后订单会显示新的端口和新的凭据供您使用。请把四处大写内容替换为您订单中的值。
| 作用范围 | 凭据 | 适用场景 | |
|---|---|---|---|
| 调用中的 proxies= | 仅这一次请求 | 写在 URL 中 | 只有少量调用的脚本 |
| Session.proxies | 会话中的每个请求 | 写在 URL 中 | 更长的任务,并把 trust_env 设为 False |
| HTTP_PROXY 和 HTTPS_PROXY | 进程中的每次 requests 调用 | 写在 URL 中 | 您无法修改的代码;NO_PROXY 列出要跳过的主机 |
| socks5h:// URL | 取决于它被设置在哪一层 | 写在 URL 中 | 需要由代理解析主机名时 |
键名指的是目标的协议,而不是代理的协议。只有 http 的字典会让普通 HTTP 走代理,而所有 HTTPS 调用都会直接发出,且没有任何错误提示。
使用 socks5 时,由您的机器解析主机名,再把 IP 交给代理。使用 socks5h 时,由代理解析,因此查询及其结果都来自代理的网络,这对按地理位置返回内容的网站很重要。
密码中的斜杠、问号或井号会把 URL 截断,requests 在连到代理之前就会失败;百分号会被当作转义符解码。请对密码进行 URL 编码,或改用 IP 白名单身份验证,省去凭据。
除非在会话上把 trust_env 设为 False,requests 会读取 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY,而且这些变量会覆盖 Session.proxies。服务器上残留的旧变量可能把会话的流量发往您未预期的地方,或者绕过代理。
把用户名和密码写进代理 URL,即 http://USERNAME:PASSWORD@HOST:PORT,并同时传给 http 和 https 两个键。requests 会把凭据发送给代理,凭据错误时代理会返回 407。如果密码包含保留字符,请先编码,或改用 IP 白名单。
用 pip install requests[socks] 安装扩展依赖,在订单上把代理本身切换为 SOCKS5,然后在 socks5h:// URL 中使用订单随后显示的端口和凭据。只改协议名是不够的:设为 HTTP 的地址在切换之前不会响应 SOCKS5。 SOCKS5
可以。通过一次 API 调用 PUT /orders/ORDER_ID/whitelist,或通过 MCP 服务器,把运行脚本的公网 IPv4 地址加入代理的白名单;控制台目前还没有相应的设置项。之后代理会接受来自该地址的无凭据连接,HTTP 和 SOCKS5 均可,URL 变为 http://HOST:PORT。设置白名单期间,代理只接受列表中的地址,该订单的用户名和密码将不再起作用;发送一个空列表即可关闭白名单,密码登录随即恢复。
不会。静态 ISP 代理在您付费的周期内就是一个地址,您通过它发送的每个请求都从这个地址发出。如果任务需要每个请求换一个地址,那需要的是轮换代理池,我们目前还不销售。
通过同一个代理请求一个回显调用方地址的页面,或在设置了该代理的浏览器中打开“我的 IP 是什么”。如果显示的是您自己的地址,很可能是缺少 https 键。 我的 IP 是什么
按地区测试您自己的网站、质量检查、广告验证、价格和市场调研以及品牌保护,按照我们的可接受使用政策无需审核。代理无法绕过验证码、机器人检测、速率限制或账号封禁,政策也禁止尝试这样做。 可接受使用政策