Python网络笔记

用Python很多年,可感觉学的比较碎片,整理下之前的笔记。 学而时习之。

网络I/O

  • uuid1: 产生唯一字符, 和机器的mac地址关联以确保不会跨机器冲突,和时间戳有关

urllib

  • parse.urlparse(“urlstring”) : 返回namedtuple,包含schema,hostname,port等
from urllib.parse import urlencode # URl编码
from urllib.parse import unquote   # 解码
import urllib.request
# 下载文件
urllib.request.urlretrieve(url, file_name)

socket

  • socket.getdefaulttimeout():返回超时设置,默认为None(没有超时检查)
  • socket 一旦设置了timeout, 就进入了 non-blocking 工作模式。在设置之后要将再次调用settimeout(None)来设置socket进入阻塞模式。

网络错误处理

Q: error: [Errno 11] Resource temporarily unavailable

A: A “Broken Pipe” error occurs when you try to write to a pipe that has been closed on the other end.

try:
    ...
except IOError as e:
    if e.errno == errno.EPIPE:
        # Handle error

import errno, os
>>> errno.EAGAIN, errno.EWOULDBLOCK
>>> os.strerror(errno.EAGAIN)
'Resource temporarily unavailable'

第三方requests

# 基础用法
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("https://httpbin.org/post", data=payload)
print(r.text)
# 上传文件
files = {'file': (file_name, open(file_path, 'rb'))}
# 可自定义文件字段名 或加入其它参数 params={...}
# files = {'userfile': (file_name, open(file_path, 'rb'))}
res = requests.post(url, files=files, headers=header, verify=False)
# 使用连接池提高性能
self.session = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100)
self.session.mount('http://', adapter)
self.session.headers.update({'Connection':'Keep-Alive'})

资源:

SSL/TLS

SSL context持有SSL配置项、证书、私钥等,同时管理与服务端socket会话的缓存,加速同一客户端的多次连接。

资源: