我正在使用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,所以我无法使用会话。
最佳答案
更好的解决方案:您可以像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)