我正试图用碎片访问gateway.playneverwinter.com

from splinter import Browser

browser = Browser()
browser.visit('https://gateway.playneverwinter.com')

if browser.is_text_present('Neverwinter'):
    print("Yes, we made it to the entrance of the Prime Material Plane!")
else:
    print("Fumble")

browser.quit()


它失败了

 File "gateway_bot.py", line 10, in <module>
    browser.visit('https://gateway.playneverwinter.com')
  File "/usr/local/lib/python3.4/dist-packages/splinter/driver/webdriver/__init__.py", line 53, in visit
    self.connect(url)
  File "/usr/local/lib/python3.4/dist-packages/splinter/request_handler/request_handler.py", line 23, in connect
    self._create_connection()
  File "/usr/local/lib/python3.4/dist-packages/splinter/request_handler/request_handler.py", line 53, in _create_connection
    self.conn.endheaders()
  File "/usr/lib/python3.4/http/client.py", line 1061, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.4/http/client.py", line 906, in _send_output
    self.send(msg)
  File "/usr/lib/python3.4/http/client.py", line 841, in send
    self.connect()
  File "/usr/lib/python3.4/http/client.py", line 1205, in connect
    server_hostname=server_hostname)
  File "/usr/lib/python3.4/ssl.py", line 364, in wrap_socket
    _context=self)
  File "/usr/lib/python3.4/ssl.py", line 578, in __init__
    self.do_handshake()
  File "/usr/lib/python3.4/ssl.py", line 805, in do_handshake
    self._sslobj.do_handshake()
  ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:598)


Firefox能够轻松连接并浏览此站点。经过诊断

$ openssl s_client -connect gateway.playneverwinter.com:443
CONNECTED(00000003)
139745006343840:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:


我发现它看起来像a fixed issue in OpenSSL,并且强制SSLv3或TLSv1允许我进行连接(然后可以使用cURL下载目标),例如任一个

openssl s_client -ssl3 -connect gateway.playneverwinter.com:443
openssl s_client -tls1 -connect gateway.playneverwinter.com:443


根据OpenSSL票证中的评论,我希望问题出在服务器端,但是由于我没有访问权限,因此这完全没有帮助。因此,为了快速解决问题,是否有一种方法可以强制碎片使用SSLv3或TLSv1?

最佳答案

研究完之后,我想到的唯一方法就是进入该client.py文件并更改其ssl内容的初始化。

09-27 03:08