如何在HTTPretty中获取非最后一次发送的请求?
解决HTTPretty无法访问
latest_requests获取所有请求的问题 看起来你遇到的问题是因为HTTPretty版本差异或者属性访问路径不对导致的。下面给你几个可行的解决方案:
1. 升级HTTPretty到最新版本
latest_requests属性是在较新的HTTPretty版本中引入的,如果你的版本过旧,就会出现AttributeError。执行下面的命令升级:
pip install --upgrade httpretty
升级后,你的原有代码应该就能正常访问httpretty.latest_requests了。另外注意你的代码里重复调用了httpretty.enable(),其实只需要调用一次就够了,修改后的代码如下:
import httpretty import requests httpretty.enable() # 只需要启用一次 httpretty.register_uri( method=httpretty.GET, uri='http://www.firsturl.com', status=200, body='First Body' ) httpretty.register_uri( method=httpretty.GET, uri='http://www.secondurl.com', status=200, body='secondBody' ) firstresponse = requests.get('http://www.firsturl.com') secondresponse = requests.get('http://www.secondurl.com') # 现在可以访问所有请求了 print("最后一次请求URL:", httpretty.latest_requests[-1].url) print("第一次请求URL:", httpretty.latest_requests[0].url) # clean up httpretty.disable() httpretty.reset()
2. 如果升级后仍无法访问,尝试直接访问内部模块的属性
在某些版本中,latest_requests并没有直接暴露在httpretty根模块下,而是在httpretty.httpretty子模块中。你可以尝试修改访问路径:
print(httpretty.httpretty.latest_requests[-1].url)
3. 手动捕获所有请求(兼容旧版本)
如果你因为某些原因无法升级版本,可以通过注册回调函数的方式手动记录所有请求:
import httpretty import requests # 用来存储所有请求的列表 all_requests = [] def record_request(request, uri, headers): all_requests.append(request) return (200, headers, 'First Body') httpretty.enable() # 第一个接口用回调函数记录请求 httpretty.register_uri( method=httpretty.GET, uri='http://www.firsturl.com', body=record_request ) # 第二个接口用lambda函数记录请求 httpretty.register_uri( method=httpretty.GET, uri='http://www.secondurl.com', body=lambda req, uri, hdrs: (200, hdrs, 'secondBody') or all_requests.append(req) ) firstresponse = requests.get('http://www.firsturl.com') secondresponse = requests.get('http://www.secondurl.com') # 遍历所有捕获的请求 for idx, req in enumerate(all_requests): print(f"第{idx+1}次请求URL: {req.url}") httpretty.disable() httpretty.reset()
这样不管用哪个版本的HTTPretty,都能获取到所有请求的信息啦。
内容的提问来源于stack exchange,提问作者Alvaro Aguilar
相关产品推荐
相关产品推荐

