我正在尝试通过首先登录以下站点来访问数据: https://accessns.nscorp.com/accessNS/login/
似乎将请求发送到后端:
请求方法:POST
当我使用python发送该请求时,我可以使用CSRF令牌获得响应。
接下来,我要访问:
采用以下标头:
有效载荷: {userId:“用户名”,classCode:“ classcode”,stationCode:“ stationcode”}
当我尝试将CSRF令牌和cookie从授权请求使用到辅助请求中时,我的代码失败,但是当我手动登录该站点,获取令牌/ cookie并将其硬编码到python中时,它不会失败。实际上,对于次请求的标头,我需要的只是CSRF令牌和cookie,以获取可行的响应。
with requests.Session() as s:
login = {'Id': 'username', 'pwd': 'password'}
auth = s.post('https://accessns.nscorp.com/accessNS/rest/auth/login',
json=login)
headers = {}
headers['CSRFTOKEN'] = auth.json()['response']['token']
headers['Cookie'] = '; '.join('='.join((i.name, i.value)) for i in
auth.cookies)
payload = {'userId': 'username', 'classCode': 'classcode',
'stationCode': 'stationcode'}
url =
'https://accessns.nscorp.com/accessNS/rest/backend/ServicesIndustrial/
services/industrial2/v2/onsite/details'
inv= s.post(url, json=payload, headers=headers)
print(inv.json())
我希望得到我请求的数据的json响应,但是,使用我的代码,我得到:
{“时间”:1559217902355,“消息”:“对象参考未设置为对象的实例。。参考号:1559217902355”,“原因”:“无效的用户输入”,“ isError”:True},在我看来,这似乎是我的标头/有效载荷存在问题,或者我缺少中间步骤。
当我对csrf令牌/ cookie进行硬编码并且不使用请求会话时,我会得到想要的响应。
答案 0 :(得分:0)
弄清楚了,我的代码工作正常。原来是对错误的URL发出了次要请求,这很奇怪,因为这是我检查过的每个开发人员控制台中列出的内容。