如何从Laravel获取CSRF令牌并将其传递给python脚本

时间:2016-10-04 09:35:16

标签: php python laravel csrf

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

  

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

     

注意:请记住在任何路径上手动添加csrf中间件   这是合适的。

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

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

此外,我无法使用会话,因为我无需登录即可访问API。

1 个答案:

答案 0 :(得分:1)

更好的解决方案:您可以像BeautifulSoup这样轻松地通过网络抓取工具获得令牌

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)