如何在不丢失身份验证的情况下模拟Session.request?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不丢失身份验证的情况下模拟Session.request?相关的知识,希望对你有一定的参考价值。

在测试使用请求库的Python软件时,建议模拟requests.sessions.Session.request

不幸的是,当我不得不处理HTTP身份验证时似乎并不是很好,我觉得我在请求中嘲笑一个太高的抽象层。我如何拦截/模拟请求,以便我不必自己处理身份验证(并获得适当的标头)?

答案

不要嘲笑Session,使用Transport Adapter。 =)

Session对象对请求进行了大量处理,并在该级别修补它将无法获得请求。

相反,写一个Transport Adapter,其send()方法存储PreparedRequest对象。

例如,请参阅the official docsan 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 服务

如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)

如何在不经过注册用户身份验证的情况下保护公共API请求

如何在不将密码保存在数据库中的情况下验证用户身份

如何在不丢失或复制任何记录的情况下移动或更改管道