如何在不丢失身份验证的情况下模拟Session.request?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不丢失身份验证的情况下模拟Session.request?相关的知识,希望对你有一定的参考价值。
在测试使用请求库的Python软件时,建议模拟requests.sessions.Session.request
。
不幸的是,当我不得不处理HTTP身份验证时似乎并不是很好,我觉得我在请求中嘲笑一个太高的抽象层。我如何拦截/模拟请求,以便我不必自己处理身份验证(并获得适当的标头)?
答案
不要嘲笑Session
,使用Transport Adapter
。 =)
Session
对象对请求进行了大量处理,并在该级别修补它将无法获得请求。
相反,写一个Transport Adapter
,其send()
方法存储PreparedRequest
对象。
例如,请参阅the official docs和an article I wrote。但是,你会想要这样的东西:
from requests.adapters import HTTPAdapter
class TestAdapter(HTTPAdapter):
"""
A Transport Adapter that stores all requests sent, and provides pre-canned responses.
"""
def __init__(self, responses):
self.responses = responses
self.requests = requests
def send(self, request, *args, **kwargs):
self.requests.append(request)
return self.responses.pop(0)
为了使这个工作,responses
将需要是一个urllib3.Response
对象列表或类似请求可以使用的东西。 TestAdapter.requests
将是requests.PreparedRequest
对象的列表。
如果你不想做所有这些工作,你可以尝试像betamax这样的东西。
以上是关于如何在不丢失身份验证的情况下模拟Session.request?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不关闭当前 Firebase 会话的情况下创建用户身份验证 [重复]
如何在不使用身份验证的情况下保护 RESTful Web 服务