python urllib已获取[Errno socket error]

python urllib已获取[Errno socket error],python,urllib,Python,Urllib,我正在谷歌python课程中练习。但是,我对urllib有问题。以下是简化代码: import urllib url = 'http://www.google.com' ufile=urllib.urlopen(url) 这段代码实际上是有效的,但如果我将url更改为其他url,例如: url = 'https://developers.google.com/edu/python/utilities#exceptions' 它将引发错误: IOError: [Errno socket err

我正在谷歌python课程中练习。但是,我对urllib有问题。以下是简化代码:

import urllib
url = 'http://www.google.com'
ufile=urllib.urlopen(url)
这段代码实际上是有效的,但如果我将url更改为其他url,例如:

url = 'https://developers.google.com/edu/python/utilities#exceptions'
它将引发错误:

IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED]   certificate verify failed (_ssl.c:590)
完整的错误信息如下所示:

Traceback (most recent call last):
  File "practice2.py", line 4, in <module>
    ufile=urllib.urlopen(url)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py", line 87, in urlopen
    return opener.open(url)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py", line 213, in open
    return getattr(self, name)(url)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py", line 443, in open_https
    h.endheaders(data)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py", line 1049, in endheaders
    self._send_output(message_body)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py", line 893, in _send_output
    self.send(msg)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py", line 855, in send
    self.connect()
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py", line 1274, in connect
    server_hostname=server_hostname)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py", line 352, in wrap_socket
    _context=self)
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py", line 579, in __init__
    self.do_handshake()
  File "/home/jren/Canopy/appdata/canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py", line 808, in do_handshake
    self._sslobj.do_handshake()
IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
回溯(最近一次呼叫最后一次):
文件“practice2.py”,第4行,在
ufile=urllib.urlopen(url)
urlopen中的文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py”,第87行
返回opener.open(url)
打开文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py”,第213行
返回getattr(self,name)(url)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/urllib.py”,第443行,open_https
h、 端头(数据)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py”,第1049行,在endheaders中
自发送输出(消息体)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py”,第893行,输入
self.send(msg)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py”,第855行,发送
self.connect()
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/httplib.py”,第1274行,在connect中
服务器\主机名=服务器\主机名)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py”,第352行,在wrap_套接字中
_上下文=自身)
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py”,第579行,在u init中__
self.do_握手
文件“/home/jren/Canopy/appdata/Canopy-1.6.2.3262.rh5-x86_64/lib/python2.7/ssl.py”,第808行,在do_握手中
赛尔夫:握手
IOError:[Errno socket error][SSL:CERTIFICATE\u VERIFY\u FAILED]证书验证失败(\u SSL.c:590)

非常感谢你读到这篇文章

1检查SSL版本

2以确保套接字模块的底部支持SSL编译模式,即当SSL编译器选项打开时


3端口错误,请检查它

Python对ssl的要求要严格得多。您可以暂时绕过ssl验证。看一看。当然,这可能不是一个永久性的解决方案,但如果您无法配置developers.google.com证书,这可能是您所能做的最好的解决方案。

非常感谢您的快速回复。我对SSL和socket知之甚少,所以如果您不介意的话,您能简单地告诉我怎么做吗?或者您有什么推荐的阅读资料吗?再次感谢。嗯,我是新手。我刚刚研究了这个问题。对不起,我不能给你一些有用的建议。请检查你的计算机时钟是否显示正确的时间!非常感谢。它起作用了!(虽然不确定它是如何工作的,因为到目前为止我对ssl知之甚少…)