简体   繁体   English

我的python请求返回401而邮递员返回200

[英]my python requests return 401 while postman returns 200

i make my requests class, the code is as below: 我使我的请求类,代码如下:

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)

and i capture an api from charles and test it in postman, it returns 200. i export python code from postman and it is like this: 我从查尔斯那里捕获了一个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)

it works, and i changed my class, put the data like this: 它有效,并且我更改了班级,将数据如下所示:

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)

i just put querystring into url, but it returns 401. i don't know where it's wrong. 我只是将querystring放到url中,但它返回401。我不知道哪里出错了。 could anybody help me? 有人可以帮我吗? thanks a lot! 非常感谢!

The run_main accepts 4 arguments, exam.run_main('get', url, headers) provides only 3 of them ( method='get', url=url, data=headers, headers=None ). run_main接受4个参数, exam.run_main('get', url, headers)仅提供3个参数( method='get', url=url, data=headers, headers=None )。

I would recommend to use named arguments when skipping some of the optional ones: 我建议跳过一些可选参数时使用命名参数:

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

Update your code in get_main method as per below code. 按照以下代码在get_main方法中更新代码。

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

Here we are calling instantiated RunMethod class and calling run_main method. 在这里,我们调用实例化的RunMethod类,并调用run_main方法。

exam = RunMethod()

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM