计算机网络
通信协议组成
- 语义部分 用于决定双方对话的类型
- 语法部分 用于决定双方对话的格式
- 变换规则 用于决定通信双方的应答关系
- TCP(Transmission Control Protocol)
端口
- 16位的整数,用于表示将数据交给哪个通信程序处理
- 在同一台机器中不能有两个程序使用同一个端口,端口号可以为 0~65535
- 公认端口(Well Known Port):端口号为 0~1023 绑定一些特定的服务
- 注册端口(Registered Port):端口号为 1024~49151 应用程序通常使用这个范围内的端口
- 动态和/或私有端口(Dynamic and/or Private Port)端口号为 49152~65535
小结
- 应用程序 --> 人
- 计算机网络 --> 邮递员
- IP 地址 --> 个人所在地方的地址
- 端口 --> 房间号
网络编程模块
模块 | 描述 |
---|
socket | 基于传输层 TCP、UDP 协议进行网络编程的模块 |
asyncore | socket 模块的异步版,支持基于传输层协议的异步通信 |
asynchat | asyncore 的增强版 |
cgi | 基本的 CGI(Common Gateway Interface,早期开发动态网站的技术)支持 |
email | E-mail 和 MLME 消息处理模块 |
ftplib | 支持 FTP 协议的客户端模块 |
httplib、http.client | 支持 HTTP 协议以及 HTTP 客户揣的模块 |
imaplib | 支持 IMAP4 协议的客户端模块 |
mailbox | 操作不同格式邮箱的模块 |
mailcap | 支持 Mailcap 文件处理的模块 |
nntplib | 支持 NTTP 协议的客户端模块 |
smtplib | 支持 SMTP 协议(发送邮件)的客户端模块 |
poplib | 支持 POP3 协议的客户端模块 |
telnetlib | 支持TELNET 协议的客户端模块 |
urllib及其子模块 | 支持URL 处理的模块 |
xmlrpc、xmlrpc.server、xmlrpc.client | 支持XML-RPC协议的服务器端和客户端模块 |
urlib模块
请求
urllib.request
:这是最核心的子模块,它包含了打开和读取 URL 的各种函数
urllib.request.open(url,data)
data
属性不仅可以发送 POST 请求,还可以发送 PUT、PATCH、DELETE
等请求
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
解析
urllib.error
:主要包含由 urllib.request 子模块所引发的各种异常。urllib.parse
:用于解析 URL,返回ParseResult
对象
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
urllib.parse.urlunparse(parts)
上一个函数的反向操作
url处理
- `urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')`
- 解析查询字符串(application/x-www-form-urlencoded 类型的数据),以 dict 形式返回解析结果,parse_qsl则以列表形式返回
- `urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)`
- 将字典形式或列表形式的请求参数恢复成请求字符串, parse_qs()、parse_qsl() 的逆函数
- `urllib.parse.urljoin(base, url, allow_fragments=True)`
- 将一个 base_URL 和另一个资源 URL 连接成代表绝对地址的 URL
- 从网站根路径开始 / ; 从scheme开始 //, 相对拼接无斜线开头
urllib.robotparser
:主要用于解析 robots.txt 文件