【发布时间】:2018-07-24 06:53:08
【问题描述】:
您好,我正在尝试访问一个 rest api,只有在登录后才能访问。我正在使用下面的代码,但得到 401,访问被拒绝。我确信如果相同的 cookie 将应用于下一次 put 调用,它不会拒绝访问。但是python会话没有使用相同的cookie..而是添加新的cookie..谢谢..
with requests.Session() as s:
logging.info("Trying to login")
response1 = s.post("https://localhost:8080/api/authentication?j_username=admin&j_password=admin", verify=False)
for cookie in s.cookies:
logging.info(str(cookie.name) + " : " + str(cookie.value))
logging.info("logged in successfully " + str(response1.status_code))
url = url1 % (params['key'])
logging.info("inspector profile inpect api : " + url)
response = s.put(url, verify=False)
for cookie in s.cookies:
logging.info(str(cookie.name) + " :: " + str(cookie.value))
logging.info("code:-->"+ str(response.status_code))
输出是
CSRF-TOKEN : c3ea875b-3df9-4bd4-992e-2b976c150ea6
JSESSIONID : M3WWdp0PO95ENQSJciqiEbiHZR6ge7O8HkKDkY6R
logged in successfully 200
profile api : localhost:8080/api/test/283
CSRF-TOKEN :--> e5b64a66-5402-430b-8f51-d8d7549fd84e
JSESSIONID :--> JUZBHKmqsitvlrPvWuaqfTJNH1PIJcEXPTkPYPKk
CSRF-TOKEN :--> c3ea875b-3df9-4bd4-992e-2b976c150ea6
JSESSIONID :--> M3WWdp0PO95ENQSJciqiEbiHZR6ge7O8HkKDkY6R
code:401
看起来下一个 api 调用没有使用 cookie,请帮帮我。
【问题讨论】:
-
您使用的是哪个版本的
requests?早期版本没有 cookie 持久性,所以您是否尝试过手动为它们提供 PUT,即s.put(url, cookies=s.cookies, verify=False)?最后,你怎么能确定 Python 发送了错误的 cookie 而不是后端重建CSRF-TOKEN和JSESSIONID- Python 本身不会生成这些值,所以它们肯定来自后端。
标签: python python-2.7 python-requests