requests有意思的proxies参数-何时使用代理有效

来源:互联网 发布:怎样学好算法 编辑:程序博客网 时间:2024/05/21 14:40
现在要访问一个目标地址是http的地址:http://icanhazip.com/,这个地址可以获取机器的外网ip
理论上,由于上述地址是http的,所以使用http代理会通过代理访问该地址,即
res =requests.get('http://icanhazip.com/', proxies={'http':'adcd.websd.zdw.vdm.tded:8080'})
print res.content
上述打印的地址是代理机器的ip,而不是本机的ip,所以代理有效

而如果用https代理,虽然能请求成功,但是实际并没有走代理,而是用的本机直接访问,即
res =requests.get('http://icanhazip.com/', proxies={'https':'adslsdfsdfspider01.wsdfeb.zwsdf.tsdfed:9090'})
print res.content
上述打印出来的结果是本机的ip

但是奇怪的是,如果我改成如下形式
res =requests.get('http://icanhazip.com/', proxies={'http':'adslspidsdfsdfer01.sdfweb.zsdfw.tesdfsdfsdd:9090'})
即key还是http,但是value我用https的地址,此时不但能请求成功,而且用的代理的机器ip,而不是本机ip,即代理有效

分析原因:(当然其实也只是猜测,但是也八九不离十)
requests命令会先判断proxies参数里面传入的key(http/https),看它与目标url协议是否一致,比如如果url是http,proxies里面也是传入的http的key,或者同是https那么此时,requests就会认为代理有效,就会通过代理来访问这个url。如果url是http,但是key是https,或者url是https,但是key是http,那么requests就会认为两者不匹配,就会直接去访问目标地址而不走代理。
一个特殊情况就是,如果url是http的,proxies的key也是http的,但是key的value我传入https代理,此时由于requests发现协议也是一致的,所以也会通过代理来请求,此时由于公司的https代理也能处理这个http请求,所以代理成功。

wget下载网页的时候使用代理原理其实和requests是一样的。都是根据key和url协议是否一致来判定是否使用代理的

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 总裁太爱我怎么办小说 小班走丢了怎么办ppt 走丢了怎么办 教案 ppt 小鸽子一大一小怎么办 烤八寸蛋糕胚表面上色严重怎么办 小班安全教案下雨打雷怎么办 幼儿园小班社会教案下雨打雷怎么办 两个月宝宝吃手怎么办 胳膊上长了个猴子怎么办 刚刚出壳的小鸡怎么办 南宁电动车牌被偷了怎么办 南宁电车车牌被偷了怎么办 电车车牌被偷了怎么办 上海电动车车牌被偷了怎么办 太子摩托车离合回的慢怎么办 指甲小月牙太少怎么办 牛仔裤用84泡了怎么办 蓝色的衣服晒红怎么办 厨房用的剪刀开合很紧怎么办 理发的剪刀钝了怎么办 小孩眼睛肿了怎么办才能消肿 柿子和螃蟹后要怎么办 柿子和螃蟹吃了怎么办 吃了没熟的虾怎么办 邻居小孩怕我家小狗怎么办 心里有一道坎过不去了怎么办 刚买的小狗怕人怎么办 一年级孩子字写不好怎么办 小狗三天没吃了怎么办 捡到一只流浪猫怎么办 仓鼠四肢红肿圈状怎么办 泰迪的鼻子干燥怎么办 小狗眼睛有白色浓稠物怎么办 流浪狗生了小狗怎么办 学生字写得很差怎么办 猫身上粘老鼠胶怎么办 抄东西抄的手疼怎么办 皮质物品被油性笔划了怎么办 在小区猫丢了怎么办 母猫把小猫丢了怎么办 小狗不吃东西没精神怎么办