Brother是一名快速代理工程师,在处理技术支持工单的过程中,经常会遇到一些用户遇到同样的问题。因此,我们将总结一些使用快速代理产品的经典问题,以帮助更多的人使用代理IP。本文的所有内容均来源于fast agent工程师的真实客户技术支持。
客户问题
使用的产品类型:私有代理-集中抽取(动态短效IP)问题描述:
在运行程序的过程中,总有一些请求没有得到任何响应,服务器也没有得到任何响应。这种现象和一开始不使用用户名和密码是一样的。代理IP用户身份验证有问题,怀疑是快速代理。
技术支持流程
0x01 排除产品问题首先,工程师写的脚本在用户的命令下使用了代理IP。运行一段时间后,问题没有出现407需要代理身份验证。
0x02 询问代码分析问题
但是用户拿出了详细的程序运行日志,统计显示有数据记录没有任何响应,于是我们向用户要了代码。粗略查看后,用户使用Python的Requests框架和多线程进行二次封装。经过一段时间的调试和故障排除,我发现Requests的返回值有些奇怪:用户会对每个请求响应执行一个布尔运算。
代码如下:
" />使用一台没有配置白名单IP的电脑,填写上代理IP运行此程序你会发现:
为什么没有输出True?按照常理来说,程序运行并没有出现异常,r此时是请求完成后的返回值,只要返回值不是零值就能够匹配到True的。但是为什么返回的<Response [407]>就会引发if判断异常呢?

查看Requests关于Response代码:
Response对象含有了__bool__魔法方法的处理,对象进行布尔运算时,这个魔法函数会被调用。
Response对象的布尔值取决于self.ok。
在HTTP状态码为400-500或者是500-600的范围内时,self.ok都为False,其余为True。

结论
用户最初没有使用用户名密码进行认证时,代理返回<Response [407]>,随后用户带上了用户名密码,程序正常跑起来。
但是访问的URL中有一部分失效链接或者当时目标网站不稳定等等其他因素,拿到了<Response [404]>,<Response [502]>这样的状态码。
由于Requests框架对与400-600状态码响应进行布尔操作都会返回False,跟之前代理未认证返回的<Response [407]>出现的现象一样,于是误以为是快代理的代理IP出现了问题。
在和用户解释了原因后,用户随即修改代码,通过HTTP状态码来判断代理请求是否成功,完美解决了这个问题。
获取更多经验好文和代理IP优惠,关注【快代理客户服务】
