python2.7用socks和socket设置代理

当前位置:首页众鑫国际 >

众鑫国际

python2.7用socks和socket设置代理

时间:2019-11-09本站浏览次数:447

       

   接下来是最近遇到的一个代理问题。

背景:一个基于python2.7的自动化测试项目

目的:因调试需求,需要通过代理连接其他公司的前端网站,来检验项目运行所在的问题。

问题:RUN>等了1分钟没有任何提示,之后抛出异常,raise ConnectionError(e, request=request)

     requests.exceptions.ConnectionError: HTTPConnectionPool(host="xx.xx.xx.xx", port=80): Max retries exceeded with url: /xx/xx/xxx (Caused by NewConnectionError("<urllib3.connection.HTTPConnection object      at 0x0000000002E7DC50>: Failed to establish a new connection: [Errno 10060] ",)

   明显连接不上网址,但是网页可以连接上,那就是代理的问题了。

解决: 正常的python2.7版本设置代理的格式是这样的:

proxy_handler = urllib2.ProxyHandler({"http":"ip:port"})opener = urllib2.build_opener(proxy_handler) r = opener.open("http://www.baidu.com")

但是我不需要主动的去打开网页,于是了解到可以把代理安装到urllib2,之后通过urllib2打开的网页都通过这个代理连接,于是就变成了这样。

proxy_handler = urllib2.ProxyHandler({"http":"http://ip:port"})opener = urllib2.build_opener(proxy_handler)urllib2.install_opener(opener)

到此为止,对于python2.7版本的代理设置基本上都可以满足了。

再次运行......还是连接不上,一样的异常。之后上网查找各种设置代理的问题,没有试成功过,包括设置pycharm的系统代理,也行不通。

之后我用python3.6版本做了个连接代理的测试,发现python3.6的可以成功,但是python3.6的代理设置和python2.7的代理设置不尽相同,没什么关系。

接着就去看代码内部逻辑找到连接网址的相关代码块,去看看是怎么连接的,既然咱们用urllib2设置的代理,那连接的时候应该会有相关的方法,what?,用socks连接的........

但是咱们知道python2.7是没有socks.py模块的,这......,想着死马当活马医吧,直接就把python3.6的socks.py文件复制到了python2.7的Lib下,直接import,把python3.6设置代理的方法复制了进来

import socketimport sockssocks.set_default_proxy(socks.HTTP, "ip", port)socket.socket = socks.socksocket

RUN>报错提示缺一个win_inet_pton.py模块,然后把这个模块下载下来,再import,再RUN,然后就看见控制台,出现了密密麻麻的SUCCESS信息。成功了。

ps:python2和python3还是有血缘关系的,哈哈。

     点击下载win_inet_pton.py 密码:7m0p




公司地址:阿里市 胶南海滨七路
联系人:方华超 13507496109
陈艺文 15328150846
电话:15186067994 传真:j5mlbwc@163.com
邮箱:1uhu0y@hotmail.com

粤公网安备 44030702001579号

众鑫集团官方网站@