requests是Python第三方库,不会自带,需要额外安装
pip install requests
模拟浏览器,向服务器发送请求,获得服务器响应结果
序号 | 方法 | 说明 |
---|---|---|
1 | requests.request() | 构造一个请求,最基本的方法,是下面方法的支撑 |
2 | requests.get() | 获取网页,对应HTTP中的GET方法 |
3 | requests.head() | 获取HTML网页的头信息,对应HTTP中的HEAD方法 |
4 | requests.post() | 向网页提交数据,对应HTTP中的POST方法 |
5 | requests.put() | 向网页提交资源,对应HTTP中的PUT方法 |
6 | requests.patch() | 向HTML网页提交局部修改的请求,对应HTTP中的PATCH方法 |
7 | requests.delete() | 向HTML提交删除请求,对应HTTP中的DELETE方法 |
8 | requests.Session() | 获取服务器会话 |
requests.request(method, url, **kwargs)
(1). method - 请求方式
序号 | 方式 | 含义 |
---|---|---|
1 | ‘GET’ | 请求获取URL位置的资源 |
2 | ‘HEAD’ | 请求获取URL位置资源的响应消息报告,即获得资源的头部信息 |
3 | ‘POST’ | 请求向URL位置的资源附加新的消息 |
4 | ‘PUT’ | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
5 | ‘PATCH’ | 请求局部更新URL位置的资源,即改变该处资源部分内容 |
6 | ‘DELETE’ | 请求删除URL位置存储的资源 |
以上1与2,是从服务器获取信息到本地
而3、4、5和6,是从本地向服务器提交信息
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成了黑盒子。
(2). url - 待操作页面的主链接
(3). **kwargs - 访问控制参数(可选)
序号 | 方式 | 使用对象 | 说明 |
---|---|---|---|
1 | params= | 字典或字节序列 | 向服务器请求数据时使用,作为参数增加到请求网址-url后部分中 |
2 | data= | 字典、字节序列或文件对象 | 向服务器提交数据时使用,data的内容因安全问题,不会直接放在URL链接里,而是放在请求体内 |
3 | json= | JSON格式的数据 | 和data类似,作为请求体向服务器提交 |
4 | headers= | 字典 | 为HTTP定制请求头。可定制User-Agent和Cookie等请求头信息,模拟浏览器内核等 |
5 | cookies= | 字典或者cookieJar | 为HTTP定制cookie |
6 | auth= | 元组 | HTTP认证功能 |
7 | files= | 字典 | 用于传输文件,存放到相应的URL上 |
8 | timeout= | float或(start,end) | 设定超时时间,在这个时间内没有返回结果,则抛出timeout异常 |
9 | proxies= | 字典 | 分别为HTTP和HTTPS设定代理服务器,这样我们访问网页使用的IP地址就是代理服务器的IP地址,防止逆追踪。可增加登录认证 |
10 | allow_redirects= | 布尔型 | 默认为1,表示是否允许重定向 |
11 | steam= | 布尔型 | 默认为1,表示是否允许对获取的内容进行立即下载 |
12 | verify= | 布尔型 | 默认为1,认证SSL证书开关 |
13 | cert= | 元组 | 本地SSL证书路径 |
举例:
kw = {'sort': 'U', 'range': '0,10', 'tags':'2020,青春'}
response = requests.request('GET', 'https://movie.douban.com/tag/#/', params=kw)
kw = {'name': 'Li', 'age': '22'}
response = requests.request('POST',"http://httpbin.org/post", data=kw)
kw = {'name': 'Li', 'age': '22'}
response = requests.request('POST',"http://httpbin.org/post", json=kw)
kw = {'name': 'Li', 'age': '22'}
headers = {"Cookie":"BAIDUID......","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}
response = requests.request('POST',"http://httpbin.org/post", json=kw,headers=headers)
r = requests.request('GET', 'https://www.baidu.com')
cookie = r.cookies
type(cookie)
# requests.cookies.RequestsCookieJar
kw = {'name': 'Li', 'age': '22'}
response = requests.request('POST',"http://httpbin.org/post",data=kw, cookies=cookie)
import requests
# 最简单的http验证
from requests.auth import HTTPBasicAuth
r = requests.request('GET','http://httpbin.org/auth', auth=HTTPBasicAuth('user', 'user'))
# r = requests.get('http://httpbin.org/auth', auth=HTTPBasicAuth('user', 'user'))
# r = requests.get('http://httpbin.org/auth', auth=('user', 'user'))
print(r.status_code)
fs = {file: open('data.xls', 'rb')}
r = requests.request('POST','http://httpbin.org/post',files=fs)
import requests
from requests.exceptions import ReadTimeout
try:
# 设置必须在500ms内收到响应,不然或抛出ReadTimeout异常
response = requests.get("http://httpbin.org/get", timeout=0.5)
print(response.status_code)
except ReadTimeout:
print('Timeout')
import requests
#普通代理
proxies = {
"http": "http://127.0.0.1:1080",
"https": "https://127.0.0.1:1080",
}
# 往请求中设置代理(proxies)
r = requests.get("https://www.taobao.com", proxies=proxies)
print(r.status_code)
# 带有用户名和密码的代理
proxies = {
"http": "http://user:password@127.0.0.1:9743/",
}
r = requests.get("https://www.taobao.com", proxies=proxies)
print(r.status_code)
# 设置socks代理
proxies = {
'http': 'socks5://127.0.0.1:1080',
'https': 'socks5://127.0.0.1:1080'
}
r = requests.get("https://www.google.com", proxies=proxies)
print(r.status_code)
r = requests.request('GET','http://httpbin.org/get',allow_redirects=False)
r = requests.request('GET','http://httpbin.org/get/**.txt',stream=False)
# 无证书访问
r = requests.get('https://www.12306.cn')
# 在请求https时,request会进行证书的验证,如果验证失败则会抛出异常
print(r.status_code)
# 关闭验证,但是仍然会报出证书警告
r = requests.get('https://www.12306.cn',verify=False)
print(r.status_code)
# 消除关闭证书验证的警告
from requests.packages import urllib3
# 关闭警告
urllib3.disable_warnings()
r = requests.get('https://www.12306.cn',verify=False)
print(r.status_code)
# 设置本地证书
r = requests.get('https://www.12306.cn', cert=('/home/youdi/Download/**.crt', '/hone/youdi/.ssh/**.key'))
print(r.status_code)
requests.get(url, params=None, **kwargs)
(1). url - 待获取页面的主链接
(2). params - 字典或字节流格式,可选
(3). **kwargs - 除params外,剩余12个可选字段
requests.get(url, params=None, **kwargs)
(1). url - 待获取页面的主链接
(2). **kwargs - 13个可选字段
requests.get(url, data=None,json=None, **kwargs)
(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(3). json- JSON格式数据,请求体中
(4). **kwargs - 除data和json外,剩余11个可选字段
requests.get(url, data=None, **kwargs)
(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(2). **kwargs - 除data外,剩余12个可选可选字段
requests.get(url, data=None, **kwargs)
(1). url - 待更新页面的主链接
(2). data- 字典、字节流或文件,请求体中
(2). **kwargs - 除data外,剩余12个可选可选字段
requests.get(url, **kwargs)
(1). url - 待删除页面的主链接
(2). **kwargs - 13个可选字段
使用request一个方法,修改它的method值并给定对应的参数,和使用其他六个方法的效果是一样的。
session = requests.Session()
session.get(url)
session.post(url,data)
response = requests.get(url, params)
response.url 返回请求URL
response.text 返回headers中的编码解析的结果,可以通过r.encoding='gbk'来变更解码方式
response.content 返回二进制结果
response.json 返回JSON格式,可能抛出异常
response.status_code 返回响应码 如200、404等
response.headers 请求头
response.cookies 返回RequestsCookieJar对象
response.history 返回以列表存储的请求历史记录