使用proxpy时如何避免SSL问题?

Ale*_*lex 6 python ssl proxy selenium

我正在尝试使用proxpy来监视python-selenium测试期间发出的任何请求.我使用的python代码如下:

from selenium import webdriver
PROXY = "0.0.0.0:9999"
webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "proxyType":"MANUAL"
}
driver = webdriver.Firefox()
driver.get("http://www.google.co.in")
driver.quit()
Run Code Online (Sandbox Code Playgroud)

我按如下方式启动代理:

python proxpy/proxpy/proxpy.py -p 9999
Run Code Online (Sandbox Code Playgroud)

当我运行python测试脚本时,我收到以下错误:

Exception happened during processing of request from ('127.0.0.1', 64667)
Traceback (most recent call last):
  File "/Users/adietz/anaconda/lib/python2.7/SocketServer.py", line 596, in process_request_thread
    self.finish_request(request, client_address)
  File "/Users/adietz/anaconda/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/Users/adietz/Projects/Invest/browsermob/proxpy/proxpy/core.py", line 56, in __init__
    SocketServer.StreamRequestHandler.__init__(self, request, client_address, server)
  File "/Users/adietz/anaconda/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "/Users/adietz/Projects/Invest/browsermob/proxpy/proxpy/core.py", line 137, in handle
    res = self.doCONNECT(host, port, req)
  File "/Users/adietz/Projects/Invest/browsermob/proxpy/proxpy/core.py", line 188, in doCONNECT
    ssl_version = ssl.PROTOCOL_SSLv23, do_handshake_on_connect = False)
  File "/Users/adietz/anaconda/lib/python2.7/ssl.py", line 933, in wrap_socket
    ciphers=ciphers)
  File "/Users/adietz/anaconda/lib/python2.7/ssl.py", line 544, in __init__
    self._context.load_cert_chain(certfile, keyfile)
IOError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我怎样才能避免这个错误?我怎样才能监控请求和响应......?

在Linux机器上,错误是等效的:

Exception happened during processing of request from ('127.0.0.1', 35348)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 596, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/home/adietz/Projects/Invest/browsermob-proxy/proxpy/proxpy/core.py", line 56, in __init__
    SocketServer.StreamRequestHandler.__init__(self, request, client_address, server)
  File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "/home/adietz/Projects/Invest/browsermob-proxy/proxpy/proxpy/core.py", line 137, in handle
    res = self.doCONNECT(host, port, req)
  File "/home/adietz/Projects/Invest/browsermob-proxy/proxpy/proxpy/core.py", line 188, in doCONNECT
    ssl_version = ssl.PROTOCOL_SSLv23, do_handshake_on_connect = False)
  File "/usr/lib/python2.7/ssl.py", line 933, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 544, in __init__
    self._context.load_cert_chain(certfile, keyfile)
IOError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

Hom*_*ker 1

这看起来像是代理本身的问题。我查看了 Github 页面,最后一次更新是四年前的事了。如果您能够切换代理,我建议使用 Browsermob,它非常用户友好。由于您使用的是 python,我从著名的 Selenium 贡献者那里找到了一个包装器库: https: //github.com/AutomatedTester/browsermob-proxy-py