мои запросы Python возвращают 401, а почтальон возвращает 200 - PullRequest
0 голосов
/ 24 декабря 2018

Я делаю свои запросы класса, код, как показано ниже:

class RunMethod:

def post_main(self, url, data, header=None):
    res = None
    if header != None:
        res = requests.post(url=url, data=data, headers=header)
    else:
        res = requests.post(url=url, data=data)

    return res.json()

def get_main(self, url, data=None,header=None):
    res = None
    if header != None:
        res = requests.get(url=url,data=data,headers=header,verify=False)
    else:
        res = requests.get(url=url,data=data,verify=False)

    return res.json()

def run_main(self, method,url,data=None,headers=None):
    res = None
    if method == 'get':
        res = self.get_main(url, data, headers)
    else:
        res = self.post_main(url, data, headers)

, и я собираю API от Чарльза и проверяю его в почтальоне, он возвращает 200. Я экспортирую код Python из почтальона, и этокак это:

import requests

url = "https://stargate.ar.elenet.me/minimart.service/intelligent/invoke"

querystring = {"traceId": "1000000294010",
           "shelfCode": "lu8ssMgCpgq00FDYdpX76Q..", "tracedAt": "1545641563164"}

payload = ""
headers = {
'X-STARGATE-ACCESS-TOKEN': "d7594351-0663-43a8-ad55-180c8b29db82",
'Cookie': "SID=NTVMAu8FKskyj06ln8J9uhS45fgcRNk1V3jQ; USERID=2228440841",
'Authorization': "ElemeAPI token",
'cache-control': "no-cache"
}

response = requests.request(
"GET", url, data=payload, headers=headers, params=querystring)

print(response.text)

это работает, и я изменил свой класс, поместил данные следующим образом:

url = "https://stargate.ar.elenet.me/minimart.service/intelligent/invoke?traceId=1000000294010&shelfCode=lu8ssMgCpgq00FDYdpX76Q..&tracedAt=1545641563164"
headers = {
    'X-STARGATE-ACCESS-TOKEN': "d7594351-0663-43a8-ad55-180c8b29db82",
    'Cookie': "SID=NTVMAu8FKskyj06ln8J9uhS45fgcRNk1V3jQ; USERID=2228440841",
    'Authorization': "ElemeAPI token",
    'cache-control': "no-cache",
    'Content-Type':'application/json'
}

exam = RunMethod()
res = exam.run_main('get', url, headers)

Я просто поместил строку запроса в URL, но он возвращает 401. Я нене знаю, где это не так.кто-нибудь может мне помочь?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Обновите ваш код в методе get_main согласно приведенному ниже коду.

res = requests.get(url=url,params=data,headers=header,verify=False)

Здесь мы вызываем созданный экземпляр класса RunMethod и вызываем метод run_main.

exam = RunMethod()

res = exam.run_main('get', url, querystring, headers)

0 голосов
/ 24 декабря 2018

run_main принимает 4 аргумента, exam.run_main('get', url, headers) предоставляет только 3 из них (method='get', url=url, data=headers, headers=None).

Я бы рекомендовал использовать именованные аргументы при пропуске некоторых необязательных:

exam.run_main('get', url, headers=headers)
...