Imooc - Python3 进阶教程: Python的网络编程

本章讲解Python网络编程的概念,socket套接字,HTTP请求与响应。
更新于: 2022-01-13 03:33:45

原理

对于客户端和服务端,都是使用socket来建立连接的,但是在使用行为上,客户端和服务端会有一些不一样。
服务端建立需要四个步骤:

  1. 新建socket、
  2. 绑定IP和端口(bind)、
  3. 监听连接(listen)、
  4. 接受连接(accept)。

客户端建立则简单一些,仅需两个步骤:

  1. 新建socket、
  2. 连接服务端(connect)。
  3. 当网络连接上以后,客户端和服务端就可以进行数据通信了,套接字通过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') # ==> 打印具体内容

参考