使用HTTP代理时Python Requests库报错问题求助
解决requests使用HTTP代理时的MaxRetryError问题
我来帮你排查下这个问题,从你给出的错误栈和代码来看,主要是这几个细节没处理好:
- 代理地址包含换行符:你用
readlines()读取proxies.txt时,每一行末尾都会自带换行符\n,直接拼接到代理地址里会导致请求时无法正确解析代理地址,这是最可能触发超时错误的原因。 - 缺少异常处理机制:一旦某个代理连接失败,整个脚本就会直接崩溃,无法继续尝试其他代理。
- 文件操作不规范:直接用
open()打开文件却不关闭,可能会导致内容写入不及时或者资源泄漏。
下面是修改后的代码,我标注了关键改动:
import requests # 用with语句读取代理文件,自动关闭资源 with open('proxies.txt', 'r') as f: # 遍历每一行,用strip()去掉换行和空白字符 for proxy in f.readlines(): proxy = proxy.strip() if not proxy: # 跳过空行 continue proxies = { 'http': f'http://{proxy}', 'https': f'http://{proxy}' } try: # 添加超时时间,避免无限等待 response = requests.get('https://google.com/robots.txt', proxies=proxies, timeout=10) response.raise_for_status() # 主动抛出HTTP状态码错误 # 用with语句写入结果,更安全 with open('uwu.txt', 'a', encoding='utf-8') as out_f: out_f.write(response.text + '\n\n') # 加分隔符方便阅读 print(response.text) except Exception as e: # 打印错误信息,方便排查哪个代理出问题 print(f"使用代理 {proxy} 时出错: {str(e)}") continue
额外提醒几个点:
- 如果你的私有代理需要认证(比如
user:pass@ip:port格式),要确保proxies.txt里的代理地址已经包含了认证信息,否则需要在代码里对应拼接。 - 可以先手动测试一个代理地址,比如把
proxy变量直接设为"ip:port"(不带换行),看看能不能正常请求,确认代理本身的可用性。 - 给
requests.get()加上timeout参数,避免脚本长时间卡在无响应的请求上。
内容的提问来源于stack exchange,提问作者Aypro Gaming
相关产品推荐
相关产品推荐

