介绍
requests目前基本上完全满足web请求的所有需求,以下是requests 的特性:
Keep-Alive &
连接池
国际化域名和
URL
带持久
Cookie
的会话
浏览器式的
SSL
认证
自动内容解码
基本
/
摘要时的身份认证
优雅的
key/value Cookie
自动解压
Unicode
响应体
HTTP(S)
代理支持
文件分块上传
流下载
连接超时
分块请求
支持
.netrc
发送请求
import requests
>>>res=requests.get("https://www.baidu.com")
>>>res.status_code
200
>>>res.headers["content-type"]
'text/html'
>>>res.encoding
>>>res.text
10 个重要的参数
method, 请求方法
url, 资源地址
params=None, 查询参数也叫做查询字符串
data=None, post请求的表单数据
headers=None, 请求头
cookies=None, cookies
files=None, # 文件
auth=None, # 校验身份
timeout=None, 超时时间
allow_redirects=True, # 重定向
proxies=None, 代理
hooks=None,# 钩子函数
stream=None,#
verify=None, 证书忽略
cert=None, # 字符串 --证书的地址 元组()
json=None, post 请求的JSON数据
添加请求头
如果想自定义请求的
Headers
,同样的将字典数据传递给
headers
参
数。
headers = {"user-agent': 'ny-app/0.0.1*}
resp = requests.get(url,headers=headers)
添加cookies
Requests
中自定义
Cookies
也不用再去构造
CookieJar
对象,直接将字
典递给
cookies
参数。
cookies = {'cookies_are': 'working'}
resp =requests.get(url,cookies=cookies)
设置超时时间
设置访问超时,设置
timeout
参数即可。
resp =requests.get(*http://github.com',timeout=0.0001)
设置代理
当我们需要使用代理时,同样构造代理字典,传递给
proxies
参数。
proxies ={"http’: '127.0.0.1:10809', "https': '127.0.0.1:10809'}
resp =requests.get(*http://example.org', proxies=proxies)
重定向
很多网站是
http
开头,为了不影响老客户,原网站不动,当访问
http
的
原网址时,重定向到新的
https
网址,在
requests
中
allow_redirects
默
认是
True
,如果是
False
则不允许重定向,也就无法重定向新网址获取
数据。
res=requests.get (url,allow_redirects=False)
证书忽略验证
有时候我们使用了抓包工具,这个时候由于抓包工具提供的证书并不是
由受信任的数字证书颁发机构颁发的,所以证书的验证会失败,所以我
们就需要关闭证书验证。在请求的时候把
verify
参数设置为
False
就可以
关闭证书验证了。
resp =requests.get(*http://httpbin.org/post', verify=False)
但是关闭验证后,会有一个比较烦人的
warning:可以使用以下方法关闭警告:
POST请求发送Json数据
json = {'json_style': "json-data'}
resp =requests.post("http://httpbin.org/post',json=json)
POST请求发送Form表单数据
处理表单ctrl+r (.*): (.*) "$1": "$2",
data = {"datal": "spider","data2":“验证数据"}
resp =requests.post(*http://httpbin.org/post', data=data)
response对象属性
print(res.text)#直接转换成字符串 非字节码
print(res.content)#图片数据 使用此参数
print(res.status_code)#状态码
print(res.json()["headers"]["User-Agent"])#自动转换成 字
典格式
# 一定要确保你使用的格式是json格式的数据
print(res.headers)#响应头
print(res.cookies)#响应cookie
print(res.url)#请求的url
print(res.request.url)#请求的url
print(res.request.headers)#请求头
响应内容
通过
Requests
发起请求获取到的,是一个
requests.models.Response
对象。通过这个对象我们可以很方便的获取响应的内容。
之前通过
urllib
获取的响应,读取的内容都是
bytes
的二进制格式,需要
我们自己去将结果
decode()
一次转换成字符串数据。
而
Requests
通过
text
属性,就可以获得字符串格式的响应内容。
字符编码和二进制数据
Requests
会自动的根据响应的报头来猜测网页的编码是什么,然后根
据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解
码。而如果发现
text
解码不正确的时候,就需要我们自己手动的去指定
解码的编码格式。而如果你需要获得原始的二进制数据,那么使用
content
属性即可。
resp = requests.get(*http://httpbin.org/get')
resp.encoding = 'utf-8'
session方法会话保持
session
方法是
requests
库发起请求的一种方法,这种方法会自动保存
访问页面得到的
cookie
值,从而再次访问的时候会自动携带
cookie
,
使得操作
cookie
方便,不需要我们自己添加
cookie
了。常用于登录;
基本的使用方法与
requests.get
相似,使用的
session
的时候需要先创
建
session
对象
1,创建一个session对象
2,找到登录页面的post请求网址
3,先登录(带cook)
4,在去get想要的网址
session=requests.session()#创建session对象
session.headers=headers#添加请求头
res_ss=session.get(index_url)
身份认证
代理IP