为什么SSLSocket这个socket子类没有create_connection方法?
Python的文档中提到:
ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version={见文档}, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True) 这个函数接收一个socket.socket的实例sock,并返回一个ssl.SSLSocket的实例。这个ssl.SSLSocket是socket.socket的一个子类,它会把底层的socket包裹在一个SSL的环境中。
但是当我尝试使用SSL socket的create_connection方法时,我收到了一个:
ssl_sock.create_connection(('www.google.com', 443))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'SSLSocket' object has no attribute 'create_connection'
1 个回答
1
create_connection()
是一个在 socket
模块里的函数,它的作用是创建一个新的套接字(socket),然后连接它,最后返回这个套接字1。在套接字对象上有一个叫 connect()
的方法,它接受和 create_connection()
一样的地址信息。
ssl_socket.connect(("...", 443))
不过,在 socket
模块的文档中,这两者很容易搞混。你需要注意你正在查看页面的哪个部分。套接字对象的方法只在 Socket Objects 这一部分能找到,而这些方法的前缀是 "socket.
",这表示“属于 socket.socket
类型的方法”。这个前缀和模块里其他函数的 "socket.
" 前缀是一样的,后者表示“属于 socket
模块的函数”。
1当文档提到“套接字”时,它指的是在函数中创建的那个套接字,尽管文档里并没有明确说会创建一个套接字。