代理IP怎么在Python里用,requests库配SOCKS5和HTTP代理

HTTP代理与SOCKS5代理的完整配置指南
发布于
5

Python requests怎么配置HTTP代理?

Python的requests库通过proxies参数配置代理,支持HTTP和HTTPS代理协议。proxies参数接收一个字典,键为协议名(http/https),值为代理地址字符串。如果代理需要认证,可将用户名和密码嵌入URL中。

HTTP代理基础配置

import requests

# 无认证代理
proxies = {
    'http': 'http://proxy-ip:port',
    'https': 'http://proxy-ip:port'
}

# 带认证代理
proxies = {
    'http': 'http://username:password@proxy-ip:port',
    'https': 'http://username:password@proxy-ip:port'
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.json())

配置说明

  • proxies字典:键为协议类型(http/https),值为代理URL字符串。
  • 认证格式http://用户名:密码@IP:端口,特殊字符需URL编码。
  • HTTPS代理:通过HTTP代理的CONNECT方法建立隧道,代理地址前仍写http://。
  • 环境变量方式:设置HTTP_PROXY和HTTPS_PROXY环境变量,requests会自动读取,无需在代码中显式传递proxies参数。

Python requests怎么配置SOCKS5代理?

requests库本身不支持SOCKS5代理,需要通过第三方库PySocks(或python-socks)扩展支持。安装后使用socks5://协议前缀配置SOCKS5代理地址。

SOCKS5代理配置

# 安装依赖
# pip install requests[socks]
# 或 pip install PySocks

import requests

# 无认证SOCKS5
proxies = {
    'http': 'socks5://proxy-ip:port',
    'https': 'socks5://proxy-ip:port'
}

# 带认证SOCKS5
proxies = {
    'http': 'socks5://username:password@proxy-ip:port',
    'https': 'socks5://username:password@proxy-ip:port'
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)

同时配置HTTP和SOCKS5代理

# 不同协议使用不同代理
proxies = {
    'http': 'http://http-proxy:8080',
    'https': 'socks5://socks5-proxy:1080'
}

天行代理(www.jiyueip.com/link/5629)同时支持HTTP和SOCKS5协议,满足Python开发中的不同代理需求。

代理配置常见错误和排错方法有哪些?

代理配置常见错误包括认证失败、连接超时和协议不匹配。认证失败通常由用户名密码错误或特殊字符未编码引起;连接超时一般是因为代理IP不可达或端口被防火墙拦截;协议不匹配指代码中使用了socks5://前缀但未安装PySocks依赖。

常见错误及解决方法

错误类型 错误信息特征 排查方向
认证失败 ProxyAuthenticationError / 407 检查用户名密码正确性,特殊字符需URL编码(%40代替@等)
连接超时 ProxyError / ConnectTimeout 检查代理IP和端口可达性,确认防火墙放行,增加timeout参数
协议错误 Missing dependencies for SOCKS 检查是否已安装PySocks(pip install requests[socks])
DNS解析失败 ConnectionError / NameResolutionError 代理服务器可能不支持DNS转发,尝试使用IP而非域名作为代理地址
SSL证书错误 SSLError / CertificateError HTTPS经过代理时证书校验可能异常,设置verify=False临时绕过(仅限测试)

排错最佳实践

  1. 先测试代理连通性:使用curl或telnet确认代理IP和端口可达。
  2. 设置timeout参数requests.get(url, proxies=proxies, timeout=10),避免长时间挂起。
  3. 检查代理协议:确认代理支持的是HTTP还是SOCKS5,协议前缀需与代理类型匹配。
  4. 使用session复用连接:多次请求使用requests.Session()减少握手开销。

常见问题

requests配置代理后请求没走代理,是什么原因?

可能原因:proxies字典的键名不正确(应为http/https小写);使用了socks5://前缀但未安装PySocks;某些请求被no_proxy环境变量排除了;代理地址格式不正确(缺少协议前缀http://或socks5://)。建议先打印proxies字典确认格式正确。

SOCKS5代理认证用户名含特殊字符怎么办?

需要对特殊字符进行URL编码,如@编码为%40、:编码为%3A。Python中使用urllib.parse.quote()方法编码:from urllib.parse import quote; user_encoded = quote('user@name')

使用代理后请求速度变慢,怎么优化?

可尝试使用Session复用连接、关闭SSL验证(仅测试环境)、使用HTTP Keep-Alive、选择延迟更低的代理节点、或在本地网络层面优化路由。代理本身的延迟取决于网络路径,非代码层面可解决。

声明:本文内容为Python requests库的开源文档整理,代码示例仅为配置说明,不保证在特定环境下运行结果。代理IP的使用应遵守相关法律法规,不得用于违规访问或非法数据采集。

常见问题(FAQ)

requests配置代理后请求没走代理,是什么原因?
可能原因:proxies键名不正确,使用socks5://但未安装PySocks,被no_proxy环境变量排除,或代理地址格式缺少协议前缀。建议打印proxies字典确认格式。
SOCKS5代理认证用户名含特殊字符怎么办?
使用urllib.parse.quote()对用户名和密码进行URL编码,如@编码为、:编码为。
使用代理后请求速度变慢,怎么优化?
可使用Session复用连接、保持HTTP Keep-Alive、选择延迟更低的代理节点。代理延迟取决于网络路径,非代码层面可完全解决。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

做合规数据采集,爬虫挂上住宅代理IP是基本操作。这篇用 Python 的 requests 和 httpx 两个库,把鲸云IP的独享住宅代理接进去,代码直接能跑。 先拿到代理地址 鲸云IP家庭区、定制区都支持 http 和 socks 导出