zoukankan      html  css  js  c++  java
  • python2.7用socks和socket设置代理

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

    背景:一个基于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':'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 socket
    import socks
    socks.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

  • 相关阅读:
    C#连接MySQL
    国双面试题
    Redis入门安装配置
    vs2013密钥
    单例模式
    用R画韦恩图
    Snipaste截图
    秩和检验
    用R包中heatmap画热图
    OTU(operational taxonomic units),即操作分类单元
  • 原文地址:https://www.cnblogs.com/lccyb/p/9431352.html
Copyright © 2011-2022 走看看