从Python Requests模块发布时忽略重定向?

时间:2018-12-03 22:54:05

标签: python django post request

我使用此脚本访问我的Django服务器并检索CSRF令牌,然后该令牌简单地尝试将数据发布到视图:

#!/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请求,这是不必要的混乱/开销。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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