Requests请求持续返回407错误,更换代理仍未解决问题求助
407错误本质是代理服务器要求认证但未通过,换代理后仍出现问题,可从以下几个方向逐一排查:
先确认代理凭证与基础连通性
别直接在代码里试,先用curl测试代理本身是否可用:curl -x http://user:pass@xx.xxx.xx.xxx:xxxx https://api.encar.com如果curl也返回407,说明代理的用户名/密码有误,或者代理IP/端口不对。另外注意凭证里的特殊字符(比如@、:、%)需要URL编码,比如@换成
%40,:换成%3A,否则会被URL解析器误判。检查代理协议配置是否匹配
你代码里HTTPS请求用的是HTTP代理地址,部分代理服务商要求HTTPS请求对应HTTPS代理协议。试试把proxies改成:proxies = { 'https': 'https://user:pass@xx.xxx.xx.xxx:xxxx' }同时确认代理服务器支持HTTPS流量转发,有些廉价代理只支持HTTP。
换用手动代理认证方式
requests直接把凭证写在代理URL里偶尔会有解析bug,试试用HTTPProxyAuth手动传入认证信息:import requests from requests.auth import HTTPProxyAuth proxies = { 'https': 'http://xx.xxx.xx.xxx:xxxx' } proxy_auth = HTTPProxyAuth('user', 'pass') url = 'https://api.encar.com/search/car/list/mobile?count=true&q=(And.Hidden.N._.(C.CarType.N._.Manufacturer.%EB%A7%88%EC%AF%94%EB%8B%A4.))&sr=%7CModifiedDate%7C0%7C200&inav=%7CMetadata%7CSort' response = requests.get(url, proxies=proxies, auth=proxy_auth) print(response.status_code)排查代理是否被目标站点限制
若代理本身能正常访问其他HTTPS站点,但访问Encar仍407,可能这个代理IP已经被Encar的反爬系统标记,导致代理层虽然认证通过,但目标站点拒绝路由。换一个全新的代理IP试试,或者用代理访问Encar官网确认是否能正常加载。更新requests库并检查网络环境
旧版本requests可能存在代理认证的兼容问题,执行pip install --upgrade requests更新到最新版。另外检查你的服务器到代理端口的连通性,用nc -zv xx.xxx.xx.xxx xxxx测试端口是否开放,部分代理会限制来源IP白名单,确认你的服务器IP在白名单内。
内容的提问来源于stack exchange,提问作者mikholand

