请求.会话()其他类中无法识别的对象

2024-04-29 00:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将会话对象从一个类传递到另一个类。但我不确定发生了什么。你知道吗

    class CreateSession:
      def __init__(self, user, pwd, url="http://url_to_hit"):
        self.url = url
        self.user = user
        self.pwd = pwd

      def get_session(self):
        sess = requests.Session()
        r = sess.get(self.url + "/", auth=(self.user, self.pwd))
        print(r.content)
        return sess


    class TestGet(CreateSession):
      def get_response(self):
        s = self.get_session()
        print(s)
        data = s.get(self.url + '/some-get')
        print(data.status_code)
        print(data)

    if __name__ == "__main__":
      TestGet(user='user', pwd='pwd').get_response()

我得到401的get\u response()。我无法理解这一点。你知道吗


Tags: 对象selfurldatagetresponsesessiondef
1条回答
网友
1楼 · 发布于 2024-04-29 00:33:58

什么是401?

您得到的响应意味着您未经授权访问资源。你知道吗


会话用于在整个请求中持久化头文件和其他先决条件,为什么每次都要创建会话而不是将其存储在变量中?你知道吗

按原样,会话应该可以工作唯一的问题是您试图调用一个您无权访问的资源。-在初始化过程中也没有传递url参数。你知道吗


如何有效使用Session的示例:

from requests import Session
from requests.exceptions import HTTPError

class TestGet:
    __session = None

    __username = None
    __password = None

    def __init__(self, username, password):
        self.__username = username
        self.__password = password

    @property
    def session(self):
        if self.__session is None:
            self.__session = Session()
            self.__session.auth = (self.__user, self.__pwd)

        return self.__session

    @session.setter
    def session(self, value):
        raise AttributeError('Setting \'session\' attribute is prohibited.')

    def get_response(self, url):
        try:
            response = self.session.get(url)

            # raises if the status code is an error - 4xx, 5xx
            response.raise_for_status()

            return response
        except HTTPError as e:
            # you received an http error .. handle it here (e contains the request and response)
            pass

test_get = TestGet('my_user', 'my_pass')
first_response = test_get.get_response('http://your-website-with-basic-auth.com')
second_response = test_get.get_response('http://another-url.com')

my_session = test_get.session
my_session.get('http://url.com')

相关问题 更多 >