requests的总结
requests的安装:
$pip install request
requests请求:
requests请求参数:
- method: 设置请求方式 get、post、delete
- url: 目标url
- params: 跟的是get请求url地址后?后面拼接的参数
- data: (optional) Dictionary, post请求的参数.
- headers: (optional) Dictionary 设置请求头.
- cookies: (optional) Dict or CookieJar object 设置用户的cookies信息.
- files: (optional) Dictionary 文件上传(post).
- auth: Auth 认证.
- timeout: 设置请求的超时时间
- allow_redirects: 设置是否允许重定向,默认是允许的
- proxies: (optional) Dictionary 设置代理.
- verify: (optional) Either a boolean, Defaults to
True
.#忽略证书认证,则设置为False
一.GET请求:
import requests
#GET请求:
kw={'kw':'长城'}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
url = '"http://www.baidu.com/s?"'
response = requests.get(url=url, params=kw, headers=headers)
#查看响应内容,response.text 返回的是Unicode格式的数据
print (response.text)
#查看响应内容,response.content返回的字节流数据
print (respones.content)
#查看完整url地址
print (response.url)
#查看响应头部字符编码
print (response.encoding)
#查看响应码
print (response.status_code)
#头信息
print(response.request.headers)
response.text乱码问题:
- 当收到一个响应时,requests 会猜测响应的编码方式,用于在你调用response.text方法时对响应进行解码。
- requests 首先在 http 头部检测是否存在指定的编码方式,如果不存在,则会使用 chardet.detect来尝试猜测编码方式(存在误差)
- 更推荐使用response.content.deocde()
二. POST请求
POST请求:
form_data = {
'username': 'lvruofan',
'password': 'qq123123'
}
url = 'http://127.0.0.1:8000/api/login/'
response = requests.post(url=url, headers=headers, data=form_data)
#返回响应头
print(response.headers)
#返回相应内容,返回Unicode格式的数据
print(response.text)
# 查看响应内容,response.content返回的字节流数据
print(response.content)
#请求头信息
print(response.request.headers)
#请求状态码
print(response.status_code)
#查看返回的json数据中的token
print(response.json()['token'])
三.POST上传图片
url = 'https://httpbin.org/post'
files = {'file':open('data_page.html','r',encoding='gbk')}
response =requests.post(url=url,headers=headers,files=files)
if response.status_code ==200:
print('上传成功')
print(response.text)
四.设置代理
proxies={
'http':'118.181.226.216',
'http':'27.46.3.26'
}
url = 'http://college.gaokao.com/schlist/p1/'
response = requests.get(url=url, params=None, headers=headers,proxies=proxies)
print(response.headers)
print(response.text)
print(response.content)
print(response.request.headers)
print(response.status_code)
五.获取cookies
####设置cookies##########
#方式一:从浏览器获取cookies,放在请求的头部
#方式二,通过设置请求的cookies参数,
#cookies: (optional) Dict or CookieJar object
response = requests.get(
url=url,headers=headers,
cookies=cookies_dict2
)
print(response.status_code)
print('设置cookies后的请求头部',response.headers)
六.session
#session:在requests请求中,我们往往需要让上下请求保持联系,
#这时我们就需要使用session
import requests
#实例化session()对象
session = requests.session()
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = session.get('http://www.baidu.com/',headers=headers)
print(response.headers)
print(session.cookies) #session.cookies 保存的是服务器,返回的cookies信息
#当session.cookies有用户信息之后,我们再使用session.get()或者session.post()
#发起请求时,就会自动携带cookies等信息
response = session.get('http://www.baidu.com/',headers=headers)
# 一般情况下,我们会再模拟登录时用到request.session,先完成登录,
# 然后使用session发起请求
七.处理HTTPS请求 SSL证书验证
Requests也可以为HTTPS请求验证SSL证书:
要想检查某个主机的SSL证书,你可以使用 verify 参数(Defaults to True)
import requests response = requests.get("https://www.baidu.com/", verify=True)
如果出现以下错误,表示验证证书出错:SSLError: (“bad handshake: Error([(‘SSL routines’, ‘ssl3_get_server_certificate’, ‘certificate verify failed’)],)”,)
要想跳过书验证,把 verify 设置为 False 就可以正常请求了。
import requests response = requests.get("https://www.12306.cn/mormhweb/", verify = False) print (response.text)