首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用Mechanize打开SSL URL

在Python中使用Mechanize打开SSL URL
EN

Stack Overflow用户
提问于 2012-06-26 05:47:33
回答 1查看 2.1K关注 0票数 2

如何使用mechanize在Python中打开SSL URL?

我正在尝试在Ubuntu上使用Python 2.7.3进行简单的页面检索,如下所示:

代码语言:javascript
复制
import mechanize
browser = mechanize.Browser()
resp = browser.open('https://mydomain.com')

但是它抛出了错误:

代码语言:javascript
复制
urllib2.URLError: <urlopen error [Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)>

奇怪的是,当我在Fedora上的Python 2.6.4下运行同样的代码时,我没有得到这个错误...

据推测,这可能不是机械化的直接问题,而是urllib2和底层SSL库的问题。谷歌搜索显示的点击率很低。有解决办法吗?

编辑:我找到了这个old bug report,并提供了一个建议的解决方法(基本上,Python尝试将SSLv23用于仅支持SSLv3的站点),但该代码却导致错误httplib.BadStatusLine: ''

EN

回答 1

Stack Overflow用户

发布于 2014-06-12 11:11:13

此问题可能是由于web服务器上禁用了SSLv2造成的,但默认情况下,Python2.x会尝试与PROTOCOL_SSLv23建立连接。这发生在https://github.com/python/cpython/blob/master/Lib/ssl.py#L867

与复制和编辑Python库模块不同,您可以通过覆盖ssl_version关键字参数在ssl模块中修补ssl.wrap_socket()。以下代码可以按原样使用。在提出任何请求之前,请将这段代码放在程序的开头。

代码语言:javascript
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11197841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档