requests添加代理ip:Python网络请求挂代理的最简写法
在Python里,用requests库发网络请求时加上代理IP,其实非常简单。最核心的就是在发起请求时,通过proxies参数传入一个字典。这个字典里,协议(比如http、https)是键,对应的代理IP地址和端口是值。
下面是一个最基础的例子,你一看就懂:
import requests
假设你从神龙IP代理获取了一个代理IP,格式通常是 ip:port
proxy_ip = "你的代理IP:端口" 例如 "123.123.123.123:8888"
设置代理
proxies = {
"http": f"http://{proxy_ip}",
"https": f"http://{proxy_ip}", 注意:很多代理服务商提供的http代理也支持https流量
}
使用代理发起请求
try:
response = requests.get("http://httpbin.org/ip", proxies=proxies, timeout=10)
print("使用代理后的IP:", response.json())
except Exception as e:
print("请求失败:", e)
这就是最简写法。你只需要把从服务商(比如神龙IP代理)那里获取到的IP和端口,填到proxy_ip变量里就行了。注意,代理字典的键http和https最好都设置,以确保所有类型的请求都走代理。
进阶技巧:让代理使用更灵活、更稳定
只会基础写法还不够,实际项目中我们常遇到需要轮换多个IP、处理代理失效、或者为不同请求配置不同代理的情况。下面分享几个进阶技巧。
1. 代理IP池与自动轮换
单一代理IP容易被限制或失效。一个常见的做法是维护一个代理IP池,每次请求随机或按顺序从中选取一个使用。这能有效分散请求,提高稳定性。
import requests
import random
模拟一个从神龙IP代理获取的IP池
proxy_pool = [
"ip1:port1",
"ip2:port2",
"ip3:port3",
... 更多IP
]
def get_random_proxy():
"""随机从IP池中获取一个代理"""
proxy = random.choice(proxy_pool)
return {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
}
使用随机代理进行请求
for i in range(5):
try:
proxies = get_random_proxy()
print(f"第{i+1}次请求,使用代理:{proxies['http']}")
response = requests.get("http://httpbin.org/ip", proxies=proxies, timeout=5)
print("响应:", response.json())
except Exception as e:
print(f"请求{i+1}失败,错误:{e}")
2. 会话(Session)级别的代理设置
如果你需要连续多次请求都使用同一个代理,或者要添加统一的请求头,使用requests.Session()会更高效。你可以为整个会话设置代理。
import requests
创建一个会话
session = requests.Session()
proxy_ip = "你的代理IP:端口"
session.proxies.update({
"http": f"http://{proxy_ip}",
"https": f"http://{proxy_ip}",
})
还可以为会话设置公共请求头
session.headers.update({"User-Agent": "My-Custom-Agent/1.0"})
会话内的所有请求都将自动使用上面设置的代理和头部
try:
r1 = session.get("http://httpbin.org/headers")
r2 = session.get("http://httpbin.org/ip")
print("会话请求1头部:", r1.json())
print("会话请求2IP:", r2.json())
except Exception as e:
print("会话请求失败:", e)
3. 处理代理认证
一些代理服务(包括神龙IP代理的部分套餐)为了安全,会设置用户名和密码认证。这时,代理地址的格式需要稍作调整。
import requests
带认证信息的代理
proxy_with_auth = {
"http": "http://用户名:密码@代理IP:端口",
"https": "http://用户名:密码@代理IP:端口",
}
或者,如果不想在URL里明文显示密码,可以使用requests的HTTPBasicAuth
from requests.auth import HTTPBasicAuth
proxies = {
"http": "http://代理IP:端口",
"https": "http://代理IP:端口",
}
auth = HTTPBasicAuth("用户名", "密码")
try:
注意:这种方式下,auth参数是传递给requests的,不是放在代理URL里
response = requests.get("http://httpbin.org/ip", proxies=proxies, auth=auth, timeout=10)
print(response.json())
except Exception as e:
print("认证代理请求失败:", e)
如何选择适合你的代理IP服务?
写代码实现代理只是第一步,选择一个稳定可靠的代理IP服务商才是项目成功的基础。市面上服务很多,但侧重点不同。这里简单对比一下,方便你决策:
关注点一:IP质量与匿名度。 高质量的代理IP应该是高匿名的,目标服务器无法侦测到你使用了代理,更无法获取你的真实IP。神龙IP代理的自营机房纯净IP在这方面就有优势,通过先进的加密算法处理数据传输,能有效保护隐私安全。
关注点二:IP资源规模与覆盖。 对于需要模拟不同地区网络环境的场景(例如了解地区用户偏好、测试产品在不同搜索引擎的排名),代理IP的地理位置覆盖至关重要。神龙IP代理覆盖国内200多个城市,拥有千万级IP资源,能提供精准的定位选择。
关注点三:稳定与速度。 代理的稳定性和带宽直接影响使用体验。如果代理频繁掉线或速度慢,会严重拖累程序效率。选择时应注意服务商的带宽保障和响应速度,例如神龙IP代理提供的30ms响应和可定制的6-15M带宽,能保障全天流畅访问。
关注点四:协议支持与灵活性。 不同的项目可能需要不同的代理协议。一个优秀的服务商应支持多种协议,如IKEv2、SSTP、PPTP、L2TP、SOCKS5等,以适应各种网络环境和工具链。
结合业务场景的套餐选择建议
了解了技术实现和选择标准后,我们来看看如何根据实际业务选择套餐。以神龙IP代理为例,其套餐设计就很好地对应了不同需求:
- 动态高级套餐: 这是最常用、最灵活的套餐。IP存活时间可灵活控制,日更IP数量巨大,非常适合需要频繁更换IP、进行大量请求的业务,例如大规模但合规的数据采集、服务器压力测试等。其6Mbps带宽和多种协议支持能满足大部分常规需求。
- 静态高级套餐: 如果你需要长期稳定不变的IP地址,比如用于维护某些需要固定IP登录的后台、或者进行长期的监控与测试,这个套餐就非常合适。它采用运营商合作资源,纯净度高,能有效防止因IP变动或关联带来的问题。
对于入门或测试需求,可以先从充值套餐开始,按量使用,灵活成本低。当业务量增长,对IP数量、带宽或稳定性有更高要求时,再升级到动态或静态套餐。
常见问题QA
Q1:我写的代码加上代理后,请求就变慢甚至超时了,可能是什么原因?
A1:这通常有几个可能:1) 代理IP本身网络不稳定或带宽不足;2) 代理服务器地理位置离你或目标服务器太远,网络延迟高;3) 代理IP已被目标网站封禁。解决办法:首先尝试更换另一个代理IP测试。如果问题普遍存在,可能需要考虑更换更优质、速度更快的代理服务,比如选择提供高带宽和低延迟节点的服务商。在代码中,合理设置timeout参数,并添加重试机制,也能提升程序的健壮性。
Q2:如何验证代理IP是否真正生效且是高匿名的?
A2:一个简单的方法是访问一些显示访问者IP和头部信息的网站(如 httpbin.org/ip)。对比使用代理和不使用代理时返回的IP地址,如果返回的是代理IP而非你的真实IP,说明代理生效。要检查匿名度,可以查看请求头中是否包含VIA、X-FORWARDED-FOR等泄露代理信息的字段。高质量的高匿代理(如神龙IP代理提供的服务)会隐藏这些信息,让目标服务器认为请求是直接来自代理IP的。

