在Python中使用Mechanize打开SSL URL
如何使用mechanize在Python中打开SSL URL 我尝试在Ubuntu上使用Python 2.7.3进行一次简单的页面检索,如:在Python中使用Mechanize打开SSL URL,python,ssl,mechanize,urllib2,Python,Ssl,Mechanize,Urllib2,如何使用mechanize在Python中打开SSL URL 我尝试在Ubuntu上使用Python 2.7.3进行一次简单的页面检索,如: import mechanize browser = mechanize.Browser() resp = browser.open('https://mydomain.com') 但它抛出了一个错误: urllib2.URLError: <urlopen error [Errno 1] _ssl.c:504: error:140773E8:SSL
import mechanize
browser = mechanize.Browser()
resp = browser.open('https://mydomain.com')
但它抛出了一个错误:
urllib2.URLError: <urlopen error [Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)>
urllib2.URLError:
奇怪的是,当我在Fedora上的Python2.6.4下运行相同的代码时,我没有遇到这个错误
据推测,这可能不是mechanize的直接问题,而是urllib2和底层SSL C库的问题。谷歌搜索显示点击率很低。有解决办法吗
编辑:我通过建议的解决方法发现了这一点(基本上Python尝试将SSLv23用于仅SSLv3的站点),但该代码反而导致错误
httplib.BadStatusLine:“
此问题可能是由于在web服务器上禁用了SSLv2,但是Python2.x在默认情况下尝试与协议_SSLv23建立连接。这种情况发生在
不必复制和编辑Python库模块,您可以通过覆盖ssl_version关键字参数在ssl模块中使用monkey patch ssl.wrap_socket()。以下代码可以按原样使用。在提出任何请求之前,请将此信息放在程序的开头
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)
此问题可能是由于在web服务器上禁用了SSLv2,但Python2.x在默认情况下尝试与协议_SSLv23建立连接。这种情况发生在 不必复制和编辑Python库模块,您可以通过覆盖ssl_version关键字参数在ssl模块中使用monkey patch ssl.wrap_socket()。以下代码可以按原样使用。在提出任何请求之前,请将此信息放在程序的开头
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)
有没有可能你在windows上?@samy.vilar,没有,我相应地更新了我的问题。我认为这是一个错误,虽然不确定,但你可以检查它很酷。有没有可能你在windows上?@samy.vilar,没有,我相应地更新了我的问题。我认为这是一个错误,尽管不确定,你可以检查它很酷。