HTTP(超文本传输协定)是一个用于传输超文本(如HTML页面)的协定,它运行在TCP/IP协定族之上。HTTP协定定义了客户端(通常是Web浏览器)与服务器之间的通信形式。在本节中,咱们将学习HTTP协定的基本概念并相熟Python中常见的HTTP库,例如requests
和urllib
。
HTTP协定基本概念
- URL(对立资源定位符):用于定位互联网上资源的地址。例如:
https://www.example.com/index.html
。 - 申请与响应:HTTP协定通信基于申请-响应模型。客户端发送申请,服务器响应申请并返回数据。
- 办法:HTTP申请有多种办法,如GET、POST、PUT、DELETE等,用于形容申请操作的类型。例如,GET用于获取资源,POST用于发送数据。
- 状态码:HTTP响应蕴含一个状态码,用于示意申请是否胜利。例如,200示意胜利,404示意未找到资源。
- 申请头和响应头:HTTP申请和响应能够蕴含头部信息,用于提供额定的元数据。例如,
Content-Type
示意数据的MIME类型。
Python中的HTTP库
requests
requests
是一个弱小且易用的Python HTTP库。首先,须要装置requests
库:
pip install requests
上面是一个应用requests
库发送GET申请的示例:
import requestsresponse = requests.get('https://www.example.com')print(response.status_code) # 输入状态码,例如:200print(response.text) # 输入响应文本
发送POST申请:
import requestsdata = {'key': 'value'}response = requests.post('https://www.example.com', data=data)print(response.status_code) # 输入状态码print(response.text) # 输入响应文本
解决JSON数据:
import requestsresponse = requests.get('https://api.example.com/data')print(response.status_code) # 输入状态码# 将响应内容解析为Python字典data = response.json()print(data)
urllib
urllib
是Python规范库中的一个模块,提供了解决URLs(次要是HTTP)的一系列性能。上面是一个应用urllib
发送GET申请的示例:
from urllib import requesturl = 'https://www.example.com'response = request.urlopen(url)print(response.status) # 输入状态码,例如:200print(response.read().decode('utf-8')) # 输入响应文本
发送POST申请:
from urllib import request, parseurl = 'https://www.example.com'data = {'key': 'value'}data_encoded = parse.urlencode(data).encode('utf-8') # 编码POST数据response = request.urlopen(url, data=data_encoded)print(response.status) # 输入状态码print(response.read().decode('utf-8')) # 输入响应文本
解决JSON数据:
import jsonfrom urllib import requesturl = 'https://api.example.com/data'response = request.urlopen(url)print(response.status) # 输入状态码# 将响应内容解析为Python字典data = json.loads(response.read().decode('utf-8'))print(data)
本节介绍了HTTP协定的基本概念以及Python中的requests
和urllib
库。理论开发中,举荐应用requests
库,因为它更加简洁和易用。通过本节的学习,你应该能够编写简略的Python网络程序,并理解如何发送HTTP申请和解决响应。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g