request中文手册:https://requests.readthedocs.io/zh_CN/latest/
request模块是python的第三方库,主要功能如下:
Keep-Alive & 连接池
国际化域名和 URL
带持久 Cookie 的会话
浏览器式的 SSL 认证
自动内容解码
基本/摘要式的身份认证
优雅的 key/value Cookie
自动解压
Unicode 响应体
HTTP(S) 代理支持
文件分块上传
流下载
连接超时
分块请求
支持 .netrc
request库的安装方法: Win + R键,在窗口输入cmd,打开命令提示符,输入pip install requests
,回车安装。
方法 | 说明 |
---|---|
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 |
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 字典形式展示的服务器响应头 |
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