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

2024-10-04 01:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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()

我启动代理如下:

^{pr2}$

运行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

我该怎么解决这个问题?如何避免这个错误?我如何才能只监视请求和响应。。。?在

在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

Tags: inpyselfclientsslinitaddressrequest
3条回答

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

我已经浏览了pproxy源库的代码。在

@Alex如果你能对代码做些修改。我认为它有效。在

以下是我建议的改变。在

core.py 在ProxyHandler类的init方法中更改对等初始化

self.peer = False

^{pr2}$

请通过创建目标应用程序的pem文件来解决证书问题。把它放在certs目录下。{{这一点我不清楚该怎么做。}}。请与@homescrecker联系。在

Reason for failure:

对等值被harcoded为false。所以每次它尝试建立你所提供的httpConnection。在

This Screenshot may help you navigate to the code

我已经成功地解决了您的问题中提到的proxpy的cert错误,但是仍然无法代理https请求。在

如果您需要的是一个用于检查HTTP流量的代理,mitmproxy是一个方便的工具,也是同类中最好的工具。在

相关问题 更多 >