Python Mechanise urllib2.URLError 违反协议(protocol) - https 处理?

标签 python https urllib2 mechanize

我正在尝试访问 https://地址。

测试代码有效:

import mechanize

br = mechanize.Browser()
br.set_handle_robots(False)
br.set_handle_equiv(False)
br.set_handle_refresh(False)
br.addheaders = [('User-agent', 'Firefox')]

response = br.open("http://www.google.com")
for f in br.forms():
    print f

当我使用 https://secure.crbonline.gov.uk/enquiry/enquirySearch.do 运行相同的代码时控制台抛出以下错误,而不是 www.google.com:

Traceback (most recent call last):
  File "C:/Users/Admin/PycharmProjects/dbs/website.py", line 11, in <module>
    response = br.open("https://secure.crbonline.gov.uk/enquiry/enquirySearch.do")
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 203, in open
    return self._mech_open(url, data, timeout=timeout)
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 230, in _mech_open
    response = UserAgentBase.open(self, request, data)
  File "C:\Python27\lib\site-packages\mechanize\_opener.py", line 193, in open
    response = urlopen(self, req, data)
  File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 344, in _open
    '_open', req)
  File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 332, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 1170, in https_open
    return self.do_open(conn_factory, req)
  File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 1118, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

据我了解,处理 HTTPS 连接存在问题。

我尝试通过代理在响应之前插入br.set_proxies语句来运行上述内容,但这并没有解决问题。

任何有助于实现此工作的帮助将不胜感激。

最佳答案

按照马克的建议,找到了这个片段

import ssl
from functools import wraps
def sslwrap(func):
    @wraps(func)
    def bar(*args, **kw):
        kw['ssl_version'] = ssl.PROTOCOL_TLSv1
        return func(*args, **kw)
    return bar

ssl.wrap_socket = sslwrap(ssl.wrap_socket)

将其粘贴到响应之前,现在可以使用了!

关于Python Mechanise urllib2.URLError 违反协议(protocol) - https 处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564455/

相关文章:

python - 为什么只打印横幅,并在结果上挂起/超时? --Python3(套接字,sys)

打开 VIM 自动缩进后,Python 解释器无法正确读取缩进

c++ - POCO json POST_METHOD 返回结果但给出 I/O 异常并结束程序

python - 嵌入 youtube 视频抓取的链接

python - 编译 Jinja2 AST 的小节

python - 测试两个 float 是否在 1 ULP 之内

WCF SOAP 服务对于大型请求返回 Not Found,对于较小的请求工作正常

jQuery youtubin 插件仅适用于选择器

Python CookieJar 保存 cookie,但不将其发送到网站

Python urllib2 无法在备用端口(不是 80)上打开本地主机?错误 10013