Imooc - Python3 进阶教程: Python的网络编程
本章讲解Python网络编程的概念,socket套接字,HTTP请求与响应。
原理
对于客户端和服务端,都是使用socket来建立连接的,但是在使用行为上,客户端和服务端会有一些不一样。
服务端建立需要四个步骤:
- 新建socket、
- 绑定IP和端口(bind)、
- 监听连接(listen)、
- 接受连接(accept)。
客户端建立则简单一些,仅需两个步骤:
- 新建socket、
- 连接服务端(connect)。
- 当网络连接上以后,客户端和服务端就可以进行数据通信了,套接字通过send()函数发送数据,通过recv()函数接收数据
server.py的文件
import socket
server = socket.socket() # 1. 新建socket
server.bind(('127.0.0.1', 8999)) # 2. 绑定IP和端口(其中127.0.0.1为本机回环IP)
server.listen(5) # 3. 监听连接
s, addr = server.accept() # 4. 接受连接
print('connect addr:{}'.format(addr))
content =s.recv(1024)
print(str(content, encoding='utf-8')) # 接受来自客户端的消息,并编码打印出来
s.close()
client.py的文件
import socket
client = socket.socket() # 1. 新建socket
client.connect(('127.0.0.1', 8999)) # 2. 连接服务端(注意,IP和端口要和服务端一致)
client.send(bytes('Hello World. Hello Socket', encoding='utf-8')) # 发送内容,注意发送的是字节字符串。
client.close()
自带的 http server
python3 -m http.server
发送 http 请求
Python官方提供的urllib库可以满足一般情况下的HTTP操作,但是urllib这个库设计是用来处理url地址的,并不是专门处理HTTP操作的包。因此,在很多场景下,一般会使用requests库来进行HTTP请求。
from urllib import request
response = request.urlopen('https://www.imooc.com') # 向慕课网官网发出请求
print(response) # ==> <http.client.HTTPResponse object at 0x000001377D631948>
# 状态码
print(response.status) # ==> 200
# headers
for k, v in response.getheaders():
print('{}: {}'.format(k, v))
requests 库(第3方)
# 安装
pip install requests
# api 更加的优雅
response = requests.get('https://www.imooc.com')
# 打印状态码
print(response.status_code)
# 打印回应头
print(response.headers)
# 返回内容
content = str(response.content, encoding='utf-8') # ==> 打印具体内容