python之requests模块-hook

requests提供了hook机制,让我们能够在请求得到响应之后去做一些自定义的操作,比如打印某些信息、修改响应内容等。具体用法见下面的例子:

import requests

# 钩子函数1
def print_url(r, *args, **kwargs):
    print("raw_url "+r.url)
# 钩子函数2
def change_url(r, *args, **kwargs):
    r.url = ‘http://change.url‘
    print("changed_url "+r.url)
    return r  # 其实没有这句话,也可以修改r.url,因为r是response对象而非普通数值,但requests官方似乎误认为回调函数一定要有return才能替换传入的数据

# tips: http://httpbin.org能够用于测试http请求和响应
url = ‘http://httpbin.org/cookies‘
response = requests.get(url, hooks=dict(response=[print_url, change_url]))
print("result_url "+response.url)

运行结果

raw_url http://httpbin.org/cookies
changed_url http://change.url
result_url http://change.url

在例子中,定义了两个钩子函数,分别用来打印response对象中的url和修改response对象中的url。通过参数hooks=dict(response=[print_url, change_url])调用,其中response是钩子的类型(目前requests v2.22.0版本仅有这一种类型)。从运行结果中,可以看出钩子函数1和钩子函数2被顺序执行了,且达到了篡改响应结果的目的。

上述例子中,只在requests方法级别调用了一次hook,如果想要每个请求都使用hook呢?可以在requests的session对象中添加hook来让该session对象发出去的请求均带有hook(关于session的用法可移步python之requests模块-session中查看),比如:

s = requests.Session()
s.hooks.update({"response": [print_url, change_url]})

参考资料

原文地址:https://www.cnblogs.com/zhuosanxun/p/12700191.html

时间: 2024-12-10 02:51:31

python之requests模块-hook的相关文章

python之requests模块-cookie

cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在python之requests模块-session中,我们知道了requests中的session对象能够在请求之间保持cookie,它极大地方便了我们去使用cookie.当我们想设置方法级别中的请求时,可以如下面示例一样操作. import requests s = requests.session(

python之requests模块

Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 发送GET请求 import urllib.request f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')

python的requests模块

使用python进行接口测试得时候可以使用requests模块,是基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库 安装requests是模块 pip install requests requests模块的使用 requests支持http的请求类型,如get,post,delete,put,head等 如: r=requests.get("www.baidu.com") r=requests.post("www.baidu.com&qu

python使用requests模块完成get/post/代理/自定义header/自定义cookies

一.背景说明 由于python3的urllib与python2有不少差别,而且urllib.request请求的一些写法不太符合人的思维习惯(文档也相当难看) 所以搞得真不太想用python,直到看urllib.request文档时注意到下边这句话 比较起来requests确实比较好用,文档也当清晰:需要自己额外安装一下,但仍比较推荐使用. 1.1 适用版本 适用于python2.6.python2.7.python3.4及以上版本,参见官方说明. 我这里使用的是当前最新的python3.7.

python (requests模块使用)

requests模块是python的一个第三方模块,它是基于python自带的urllib模块封装的,用来发送http请求和获取返回的结果,操作很简单.需要自己安装  pip install requests import requests req = requests.get('http://www.baidu.cn',data={'username':'xxx'},cookies={'k':'v'}, headers={'User-Agent':'Chrome'},verify=False,

基于python第三方requests 模块的HTTP请求类

使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): 2 3 def __init__(self): 4 #拿到代理iplist 5 self.iplist = ['自己想办法搞'] # 6 self.UserAgent = ['自己想办法搞'] 7 8 def get(self,url,timeout,proxy=False,num_retries=3): 9 '''ur

python之requests模块学习(一)

安装好requests后调用出现: 是因为当前路径存在了和模块一样的名称: http://stackoverflow.com/questions/12258816/module-object-has-no-attribute-get-python-error-requests 如如果出现重命名不了该文件: 是因为py文件里面存在requests必须要全部删除后才能重命名,包括注释里面也不能有"""@version:2.7.10@author:chenmingli# @file

【python】requests模块初探(一)

一.写在前面 Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求.Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner. 那么,requests都有哪些应用场景呢? 1.服务器编程基础: 2.爬虫利器: 3.自动化接口测试: 4.运维监控脚本 等等 本篇,我就记录一下reques

python之requests模块中的params和data的区别

params的时候之间接把参数加到url后面,只在get请求时使用: 1 import requests 2 url='https://api.ireaderm.net/account/charge/info/android' 3 data={'recharge':36,'fee_id':'ireader_nonrenew_vip'} 4 header={ 5 'X-ZY-Timestamp':'1502097587609', 6 'X-ZY-Sign':'xxxxxxxxxxxxxxxxxxx