从request.get接收404响应

问题描述 投票:1回答:1

寻找以下的一些指导:

import requests
import json

class RESTConnector:

    def __init__(self, user, passwd, url):
        self.user = user
        self.passwd = passwd
        self.url = url
        self.auth = user + ' ' + passwd

    def display_details(self):
        return '{} {} {} {}'.format(self.user, self.passwd, self.url, self.auth)

    def pull_data(self):
        response = requests.get(self.url, self.auth, timeout=3)
        print(type(response))
        print(response)

sub = RESTConnector('username1', 'password', 'http://some.url.com')

selection = input("Select data to query: ").lower()
if selection == 'subnet':
    print(sub.display_details())
    print(sub.pull_data())
else:
    print(f'Selection not recognised!')

使用curl测试通过display_details方法返回的凭据,并按预期返回数据,但上面的代码返回以下内容:

$python "/Desktop/Python/RESTConnector.py"
Select data to query: subnet
username1 password https://some.url.com username1 password
<class 'requests.models.Response'>
<Response [404]>
None
python-requests
1个回答
1
投票

您得到该错误,因为您必须使用keyworded参数传递auth。

requests.get(url, auth=('user', 'passwd'), timeout=timeout)

这是实施:

import requests
import json

class RESTConnector:

    def __init__(self, user, passwd, url):
        self.user = user
        self.passwd = passwd
        self.url = url
        self.timeout = 3

    def display_details(self):
        # Display all relevant class attribute.
        data = [f'{x}: {getattr(self, x)}' for x in self.__dir__() if not x.endswith('__')]
        return data

    def pull_data(self):
        response = requests.get(self.url, auth=(self.user, self.passwd), timeout=self.timeout)
        print('Task executed successfully:', response.ok)

sub = RESTConnector('username', 'password', 'http://some.url.com')

selection = input('Select data to query: ').lower()
if selection == 'subnet':
    print(sub.display_details())
    print(sub.pull_data())
else:
    print('Selection not recognised!')
© www.soinside.com 2019 - 2024. All rights reserved.