【问题标题】:How to obtain CSRF token from Laravel and pass it in a python script如何从 Laravel 获取 CSRF 令牌并将其传递给 python 脚本
【发布时间】:2017-02-12 10:02:37
【问题描述】:

我正在使用oauth2-server-laravel 来验证将数据导出到 csv 文件的 api。文档有这个要求。

为了使一些授权和资源服务器工作 正确使用 Laravel5,删除 App\Http\Middleware\VerifyCsrfToken 来自 $middleware 数组的行 并将其放在$routeMiddleware 数组中,如下所示: 'csrf' => App\Http\Middleware\VerifyCsrfToken::class,

注意:记得在任何路由上手动添加 csrf 中间件 很合适。

问题是我的应用程序很大,我不想手动更改所有其他路由。所以我在文档中遇到了X-CSRF-TOKEN

我的问题是:如何获取 csrf 令牌,以便可以将其附加到 Python 中的标头参数中?文档说我可以使用 HTML 标记 meta,但我没有使用任何 HTML 文件来完成这项任务。

我也不能使用会话,因为我不需要登录来访问 API。

【问题讨论】:

  • 即使经过广泛的谷歌搜索,我也找不到解决方案。相反,我将使用 oauth2 的路由添加到 VerifyCsrfToken$except 数组中,如 here 所述

标签: php python laravel csrf


【解决方案1】:

更好的解决方案:你可以像 BeautifulSoup 一样使用 web scraper 轻松获取令牌

import requests
from bs4 import BeautifulSoup

r = requests.get(url) #url is create form 
soup = BeautifulSoup(r.text, 'html.parser')
for link in soup.find_all('input'):
    token = link['value']
   

当然,请注意 Laravel 还会为每个表单生成一个 cookie。因此,您需要将 cookie 与您的发布请求一起发送。

jar = requests.cookies.RequestsCookieJar()
    jar.set('XSRF-TOKEN', r.cookies['XSRF-TOKEN'])

现在您可以轻松地发送您的发帖请求。例如,我正在发送登录请求

url_post = "http://localhost/login"    
data = {
        "_token": token,
        "email": "example@email.com",
        "password": "password"
    }


login_request = requests.post(url_post, data=data, cookies=jar)
print(r.text)

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 2017-02-17
    • 2019-10-08
    • 2023-04-02
    • 1970-01-01
    • 2021-02-02
    • 2018-10-11
    • 2015-05-13
    • 2016-02-04
    相关资源
    最近更新 更多