就我而言,我需要从生产机器中提取数据。我的同事为我设计了以下策略(API)。
这是我的代码:
import requests
s = requests.session()
login_data=dict(User='XXXXXX',Password='XXXXXX')
url = 'http://internal-pilot-XXXXXXX-elb-15h4lq2sm46fi-6574XXXXX.us-east-1.elb.amazonaws.com/XXXX-editor-web/spring_security_login'
s.post(url, data=login_data)
r = s.get('http://internal-pilot-XXXXXXX-elb-15h4lq2sm46fi-6574XXXXX.us-east-1.elb.amazonaws.com/XXXX-editor-web/api/projects')
我逐行执行代码。运行's.post(url,data = login_data)后,我注意到虽然我得到了'Response [200]',但会话cookie是空的。
>>> s.post(url, data=login_data)
<Response [200]>
>>> s.cookies
<RequestsCookieJar[]>
运行s.get('...')之后,我注意到即使我收到'Response [403]',会话cookie也不再是空的。
>>> s.get('http://internal-pilot-XXXXXXX-elb-15h4lq2sm46fi-6574XXXXX.us-east-1.elb.amazonaws.com/oaqc-editor-web/api/projects')
<Response [403]>
>>> s.cookies.get_dict()
{'AWSELB': '39E1F543067A169F5670C20A97C217D25E0183C29D4C14F38EFC1FC58E993C6F96E88F97B58950E092F4C948A0A99AE42DED20A93E542EFD80F074EB26477729DB0DD1B5469C655062CB6005E3C6F5BDDDCEA57A12', 'JSESSIONID': '61A6DFB9DDDF1BFD7FD4F6B47E7E2B2D'}
然后我试过了 r = s.get('...',cookies = s.cookies) 但仍然得到“响应[403]”,这意味着cookie未成功存储并传递到以下请求中。
我在这里犯了什么错吗?我在Stack Overflow中搜索并发现了许多类似的讨论,但没有一个能解决我的问题。非常感谢。
答案 0 :(得分:0)
我猜你的login_data语法无效。您没有为字典提供键值对 您需要提供login_data:
import requests
s = requests.session()
login_data = {'User':'XXXXX', 'Password': 'XXXXX'} # <----
url = 'http://internal-pilot-XXXXXXX-elb-15h4lq2sm46fi-6574XXXXX.us-east-1.elb.amazonaws.com/XXXX-editor-web/spring_security_login'
s.post(url, data=login_data)
r = s.get('http://internal-pilot-XXXXXXX-elb-15h4lq2sm46fi-6574XXXXX.us-east-1.elb.amazonaws.com/XXXX-editor-web/api/projects')