13

我今天回到了一个通过 SSL 登录 Gmail 的旧脚本。该脚本在我上次运行它时运行良好(几个月前),但现在它立即死亡:

<urlopen error The read operation timed out>

如果我设置超时(无论多长时间),它会立即死亡:

<urlopen error The connect operation timed out>

后者可通过以下方式重现:

import socket
socket.setdefaulttimeout(30000)
sock = socket.socket()
sock.connect(('www.google.com', 443))
ssl = socket.ssl(sock)

返回:

socket.sslerror: The connect operation timed out

但我似乎无法重现前者,并且在通过代码进行了很多步骤之后,我不知道是什么原因造成的。

4

4 回答 4

2
import socket
socket.setdefaulttimeout(30000)
sock = socket.socket()
sock.connect(('www.google.com', 443))
ssl = socket.ssl(sock)
ssl.server()
--> '/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com'

它工作得很好。我无法重现您的错误。

于 2008-09-18T15:06:36.347 回答
0

HTTPS 无法访问 www.google.com。它重定向到不安全的 HTTP。要获取邮件,您应该去https://mail.google.com

于 2008-09-18T15:06:11.310 回答
0

The first thing I would check is whether you need to connect via an HTTP proxy (in which case direct connections bypassing the proxy will likely time out). Run Wireshark and see what happens.

于 2008-09-18T20:29:34.447 回答
0

连接到 没有超时www.google.com,但 Python 3.x 现在提供了该ssl模块,因此 OP 的示例代码将不起作用。

以下是适用于当前 Python 版本的类似内容:

import ssl
import socket
from pprint import pprint


hostname = 'www.google.org'
context = ssl.create_default_context()

with socket.create_connection((hostname, 443)) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        pprint(ssock.getpeercert()['subject'])

产生:

((('countryName', 'US'),),
 (('stateOrProvinceName', 'California'),),
 (('localityName', 'Mountain View'),),
 (('organizationName', 'Google LLC'),),
 (('commonName', 'misc.google.com'),))

在此处阅读有关 ssl 模块的更多信息:https ://docs.python.org/3/library/ssl.html

于 2021-04-18T14:22:48.013 回答