Python培训
400-996-5531
现今有关python网络编程的书籍很多,但是很多都是运用相关的package,之后直接从顶层来进行讲授。但是这样的学习方法比较适合技工,对于python爱好者来说,这种空中楼阁式的学习方法并没有什么益处。因为不同的package由编程风格迥然不同的人贡献,最终导致的结果就是记住了一大堆乱七八糟的函数名,然而不知道为什么要这样用相应的函数,过了两天也就全忘记了。从今天起,本文选择一种从python内置的较底层的package开始学习的方式,逐步学习python的网络编程。越向底层进行学习,越能发现相应的问题。
今天首先开始对python3的socket包的源代码开始学习。
socket包实现了一系列网络编程的工具函数。在未来一段时间中,我将选取一些socket.py中重要的代码进行学习,之后用较底层的代码实现一些简单的网络编程功能。
我们从socket.py中定义的第一个函数学起,如下:
try: import _sslexcept ImportError: # no SSL support passelse: def ssl(sock, keyfile=None, certfile=None): # we do an internal import here because the ssl # module imports the socket module import ssl as _realssl warnings.warn("socket.ssl() is deprecated. Use ssl.wrap_socket() instead.", DeprecationWarning, stacklevel=2) return _realssl.sslwrap_simple(sock, keyfile, certfile) # we need to import the same constants we used to... from _ssl import SSLError as sslerror from _ssl import \ RAND_add, \ RAND_egd, \ RAND_status, \ SSL_ERROR_ZERO_RETURN, \ SSL_ERROR_WANT_READ, \ SSL_ERROR_WANT_WRITE, \ SSL_ERROR_WANT_X509_LOOKUP, \ SSL_ERROR_SYSCALL, \ SSL_ERROR_SSL, \ SSL_ERROR_WANT_CONNECT, \ SSL_ERROR_EOF, \ SSL_ERROR_INVALID_ERROR_CODE
try A except B else C 的语法是比较pythonic的,如果执行A代码没有捕获到异常,那么执行else之后的C段代码,在上一段代码中则是定义了ssl函数。我们重点关注下ssl()函数。
def ssl(sock, keyfile=None, certfile=None): # we do an internal import here because the ssl # module imports the socket module import ssl as _realssl warnings.warn("socket.ssl() is deprecated. Use ssl.wrap_socket() instead.", DeprecationWarning, stacklevel=2) return _realssl.sslwrap_simple(sock, keyfile, certfile)
ssl全称是secure sockets layer,中文叫安全套接层。简单来说就是当我们远程与对方服务器建立通信时,需要获得对方的认证,具体的认证方式不细说了,等到未来应用的时候再谈。总之就是我们通过自身的keyfile(秘钥)来获得对方服务器certfile(访问证书)的过程。
这段代码值得学习的地方有一个internal import,作者说:
# we do an internal import here because the ssl # module imports the socket module
因为ssl模块import了socket.py,如果放在外面显然就会出现在socket模块代码中import socket代码的奇怪情况,而将import socket 放在ssl函数的局部作用域中就无此问题。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved