找回密码
 立即注册
首页 python python-基础 查看内容

从Python请求模块POST时忽略重定向?


我使用这个脚本访问我的Django服务器并检索一个CSRF令牌,然后只是尝试将数据POST到视图:
#!/usr/bin/env python2.7
import sys, time
import requests

username = 'root'
password = 'pass'

fileName, userFolder, uploadFolder = sys.argv

URL = 'http://127.0.0.1:8000/admin/login/'
client = requests.session()

# Retrieve the CSRF token first
client.get(URL)  # sets cookie
if 'csrftoken' in client.cookies:
    csrftoken = client.cookies['csrftoken']

login_data = dict(username=username, password=password, csrfmiddlewaretoken=csrftoken, next='')
r = client.post(URL, data=login_data, headers=dict(Referer=URL))


但在我的Django开发服务器的访问日志中,我看到:
[03/Dec/2018 17:44:17] "GET /admin/login/ HTTP/1.1" 200 1637
[03/Dec/2018 17:44:17] "POST /admin/login/ HTTP/1.1" 302 0
Not Found: /accounts/profile/
[03/Dec/2018 17:44:17] "GET /accounts/profile/ HTTP/1.1" 404 9904


我不明白为什么我一直得到额外的Get和404?

是否可以配置我的Python请求以忽略任何类型的重定向信号,无论它是用于GET还是POST或session.get()?

我试过添加allow_redirects=False,client.get(URL, allow_redirects=False)但没有帮助。

我的POST工作正常,我只是试图消除额外的GET请求,这是不必要的混乱/开销。

谢谢!

解决方法


默认情况下,Django /accounts/profile/在成功登录后重定向到。

要停止请求跟随重定向,您应该allow_redirects=False在session.post()呼叫中使用。

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册