request中文手册:https://requests.readthedocs.io/zh_CN/latest/
Requests模块
Requests模块简介
-
request模块是python的第三方库,主要功能如下:
Keep-Alive & 连接池
国际化域名和 URL
带持久 Cookie 的会话
浏览器式的 SSL 认证
自动内容解码
基本/摘要式的身份认证
优雅的 key/value Cookie
自动解压
Unicode 响应体
HTTP(S) 代理支持
文件分块上传
流下载
连接超时
分块请求
支持 .netrc -
request库的安装方法: Win + R键,在窗口输入cmd,打开命令提示符,输入
pip install requests
,回车安装。
Request模块的7个主要参数
方法 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑下面各种方法的基础方法 |
requests.get() | 获取HTML页面的主要方法,对应于HTTP的GET方式 |
requests.head() | 获取HTML页面头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML页面提交POST请求方式,对应于HTTP的POST |
requests.put() | 向HTML页面提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML页面提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
- requests.get(url):
- 返回一个包含服务器资源的response对象,构造一个向服务器请求资源的request对象
- 完整使用方法:
def get(self, url, **kwargs):
r"""Sends a GET request. Returns :class:`Response` object.
:param url: URL for the new :class:`Request` object.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:rtype: requests.Response
"""
kwargs.setdefault('allow_redirects', True)
url :获取页面的URL
param: url中的额外参数(如:查询字符串为键/值对的形式)。字典或字节流格式,可选
kwarges:12个控制访问的参数
- 示例:
>>> r = requests.get('https://api.github.com/events')
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
Response响应内容
- Response对象属性
属性 | 说明 |
---|---|
r.ststus_code | HTTP请求的响应状态码 |
r.text | HTTP响应内容的字符串形式,即:URL对应的源码 |
r.encoding | 从HTTPheader中猜测响应内容编码方式,也可以修改文本编码 |
r.apparent_coding | 从内容分析响应的内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
r.json() | Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据 |
r.raw | 获取来自服务器的原始套接字响应(确保在初始请求中设置了 stream=True) |
r.headers | 查看以一个 Python 字典形式展示的服务器响应头 |
定制请求头
- 如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了
dict() 函数用于创建一个字典,语法如下:
class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
参数说明:
**kwargs -- 关键字
mapping -- 元素的容器。
iterable -- 可迭代对象。
实例:
>>>dict(a='a', b='b', t='t') # 传入关键字
{'a': 'a', 'b': 'b', 't': 't'}
- 示例:
>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, headers=headers)
- 如果在
.netrc
(.netrc是个用户配置脚本文件)中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了 auth= 参数,.netrc
的设置就无效了。 -
如果被重定向到别的主机,授权 header 就会被删除。
-
代理授权 header 会被 URL 中提供的代理身份覆盖掉。
-
在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。
POST请求
- 源码:
**def post(url, data=None, json=None, **kwargs):
r"""Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
post(url: str, data: Union[None, str, bytes, MutableMapping[str, Any], MutableMapping[Unknown, Any], Iterable[Tuple[str, str]], Unknown], json: ..., **kwargs) -> Response
Sends a POST request.
:param url: URL for the new Request object.**
- Content-Type(MIME)的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data格式。
- application/x-www-form-urlencoded
import requests
datas = {'key1':"value1","key":"value2"} #请求的参数构造成一个字典
r = requests.post("https://www.baidu.com",data = datas) #将字典传给requests.post()的data参数
r.encoding = "utf-8" #防止编码出错
print(r.text)
- 其他类型请参考:POST请求https://www.cnblogs.com/single-fire/p/10542202.html
cookie
- 查看cookie,
r.cookies
即可查看cookie。
import requests
url = "https://www.baidu.com"
r = requests.get(url)
print(r.cookies) #直接通过打印r.cookies来获取查看cookie内容
- 发送cookie
import requests
url = "https://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0"
}
cookies = {"cookie_name": "cookie_value", } #设置cookies参数
response = requests.get(url, headers=headers, cookies=cookies)
import requests
"""先实例化一个RequestCookieJar的类,然后set设置值,最后在get方法里面指定cookies参数"""
jar = requests.cookies.RequestsCookieJar() # Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径用
jar.set("BDORZ", "4EDT7A5263775F7E0A4B&F330724:FG=1", domain="baidu.com")
url = "https://www.baidu.com"
response = requests.get(url, cookies=jar)
session会话
import requests
s = requests.Session() #维持会话,可以让我们在跨请求时保存某些参数
url = "https://www.baidu.com"
r = s.get(url) #get方式发送请求
r.encoding = "utf-8" #防止乱码
print(r.text)
请求与响应
- 任何时候进行了类似 requests.get() 的调用,你都在做两件主要的事情。其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。
参考资料:
- https://requests.readthedocs.io/zh_CN/latest/
- https://www.bilibili.com/video/BV1tb411h7dx?t=209
- https://www.cnblogs.com/single-fire/p/10542202.html
- https://www.runoob.com/http/http-content-type.html