HTTP协议
HTTP协议,即超文本传输协议(Hypertext transfer protocol)。
HTTP协议永远都是客户端发起请求,服务器回送响应。
HTTP协议的主要特点可概括如下:
1、支持客户/服务器模式。支持基本认证和安全认证。
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
HTTP协议是采用URL作为定位网络资源的标识。
URL格式: protocol :// hostname[:port] / path / [;parameters][?query]#fragment
名称 | 说明 |
---|---|
protocol | 协议,常用的协议是http |
hostname | 主机地址,可以是域名,也可以是IP地址 |
port | 端口,http协议默认端口是:80端口,如果不写默认就是:80端口 |
path | 路径,网络资源在服务器中的指定路径 |
parameter | 参数,如果要向服务器传入参数,在这部分输入 |
query | 查询字符串,如果需要从服务器那里查询内容,在这里编辑 |
fragment | 片段,网页中可能会分为不同的片段,如果想访问网页后直接到达指定位置,可以在这部分设置 |
HTTP协议对于资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获取该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
我们可以把互联网当成一个云端,云端上存储的所有资源用URL作为描述/标识
HTTP通过URL对资源做定位,通过这6个方法对资源进行管理。
每次操作都是独立的。
理解patch 和 put的区别
假设URL位置有一组数据UserInfo,包括userId, userName, userGender等20个字段。
需求:在某个特别的页面里只能修改userName,其他不变
采用patch:仅向URL提供修改后userName。
采用put:必须将完整的20个字段提交到URL,做完整更新,未提交字段被删除,且浪费带宽。
HTTP协议与Response库
HTTP协议方法 | Response库方法 | 功能一致性 |
---|---|---|
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
import requests
r = requests.head("http://httpbin.org/get")
r.headers #获取该网页的头部信息
r.text #内容为空
##Requests库的post()方法
payload = {'key1':'value1','key2':'value2'}
r = requests.post('http://httpbin.org/post', data = payload) #向URL POST一个字典,自动编码为form(表单)
print(r.text)
##Requests库的post()方法
r = requests.post('http://httpbin.org/post',data = 'ABC') #向URL POST一个字符串自动编码为data
print(r.text)
##Requests库的put()方法
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.put('http://httpbin.org/put', data = payload)
print(r.text)