Python的requests库基础介绍2:常用方法整理,URL参数、各种POST、响应、异常、cookies等

本文总结了requests库基础的常见用法,包括URL参数、各种POST、响应、异常、cookies等。

一、传递URL参数

为 URL 的查询字符串(query string)传递数据。

urlparams = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=urlparams)
r.status_code
r.request.url

二、定制请求头

为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)

三、响应内容

(1)文本响应内容

通过r.text 输出的响应内容,Requests是根据响应头推测的文本编码,推测得到的编码存放在encoding属性中。

import requests
r= requests.get('https://www.baidu.com')
r.text

当r.text输出的内容遇到乱码时,可以修改encoding的值来解决。

r.encoding = 'utf-8'
r.text

(2)二进制响应内容

(3)原始响应内容

r = requests.get('https://www.baidu.com', stream=True)
r.raw
r.raw.read(10)

(4)JSON响应内容

r = requests.get('https://api.github.com/events')
r.json()[0]

四、POST各种数据

(1)数据字典

非常简单就能实现发送一些编码为表单形式的数据

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
r.request.body

(2)元组列表

在表单中多个元素使用同一 key 的时候,这种方式尤其有效。

payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)
r.request.body

(3)json数据

使用 json 参数直接传递,然后就会被自动编码。

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)
r.request.body

(4)文件

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
r.request.body[0:200]

五、响应状态码

r = requests.get('http://httpbin.org/get')
r.status_code
r.status_code == requests.codes.ok

六、响应头

r = requests.get('http://httpbin.org/get')
r.headers['Content-Type']
r.headers.get('content-type')

七、Cookie

(1)发送cookies到服务器

直接使用 cookies 参数即可

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
r.request.headers

(2)查看服务器返回的cookies

r.cookies['BDORZ']
r = requests.get('https://www.baidu.com')
r.cookies
r.cookies['BDORZ']

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。

八、重定向与请求历史

可以使用响应对象的 history 方法来追踪重定向。Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。
r = requests.get('http://github.com')
r.url
r.status_code
r.history

Github 将所有的 HTTP 请求重定向到 HTTPS

九、超时

requests 在经过timeout 参数设定的秒数时间之后停止等待响应。

十、错误与异常

遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。

如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。

若请求超时,则抛出一个 Timeout 异常。

若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

bad_r = requests.get('http://httpbin.org/status/404')
bad_r.status_code
bad_r.raise_for_status()

十一、代理

通过proxies参数设置代理

proxies = {'http':'ip1','https':'ip2' }

requests.get('url',proxies=proxies)

十二、会话对象,跨请求保持参数

通过Session设置会话,实现跨请求保留参数

s = requests.Session()
s.auth = ('auth','passwd')
s.headers = {'key':'value'}
r = s.get('url')
r1 = s.get('url1') 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值