文章目录
1. requests 模块的作用
- 向服务器端发送请求并接受服务器的响应
- 最常用的方法是:requests.get(),其作用相当于 urllib 库中的 urlopen
- requests 模块的表达比 urllib 更简洁,尤其表现在高级功能的实现上,例如:
- 文件上传
- 会话维持
- Cookie 功能
- SSL 证书验证
- 设置代理
2. requests 简单方法和理解
2.1 requests.get() / requests.post() / requests. delete 等:获取服务器信息
用 requests.get() 请求到的信息有:
import requests
x = requests.get("http://www.baidu.com")
print(x,'\r\n')
print(x.headers,'\r\n')
print(x.url,'\r\n')
print(x.text,'\r\n')
print(x.json,'\r\n')
2.2 requests.get() 方法的局限性
requests.get() 方法可以传入的参数很少,只有以下三个:
- url :必传参数,负责定位资源
- params:选填,负责对资源进一步限定
- headers:选填,指定请求行中的信息
与之相似的方法还有:
- requests.post() 用post 方法来请求数据
- requests.put() 用 put 方法来请求数据
- requests.delete() 用 delete 方式来请求数据
这些方法都是并列的,当使用不同的方法(get、post、put、delete等)来向服务器发出请求,相当于每一种方法打开一个浏览器,即:如果我们使用如下代码,相当与打开了两个浏览器:
import requests
x = requests.get('http://www.baidu.com')
y = requests.post('http://www.baidu.com')
那么,使用什么方式来编写代码可以相当于开了一个浏览器的不同选项卡,而不是多个浏览器呢?
创建会话 Session 来实现。
2.3 requests.Session() 创建会话
import requests
s = requests.Session()
x = s.get('http://www.baidu.com')
y = s.post('http://www.baidu.com')
通过一个会话来 get 和 post 请求,就相当于在一个浏览器里面打开了两个标签页,非常方便而且快捷。
2.4 等效的数据请求方式
以下两端代码是等效的:
import requests
s = requests.Session()
x = s.get('http://www.baidu.com')
y = s.post('http://www.baidu.com')
print(x,y)
import requests
s = requests.Session()
req_get = requests.Request('GET','http://www.baidu.com')
req_post = requests.Request('POST','http://www.baidu.com')
prepared_get = s.prepare_request(req_get)
prepared_post = s.prepare_request(req_post)
data_get = s.send(prepared_get)
data_post = s.send(prepared_post)
print(data_get,data_post)
requests.Request() 就是一个专门用于请求的类,里面包含了 GET, POST, DELETE, PUT 等所有的请求方式,而且也可以在创建对象的时候规定:
- url
- headers
- data
与 requests.get() 方式不同的是:如果用 Request 类来创建对象,然后将这个请求发送给服务器的话,还要使用 prepare_request() 函数 和 send 函数进行操作。