Dart-使用相同的打开会话进行GET和POST-CSRF

时间:2018-08-21 20:29:22

标签: python http session dart session-cookies

我正在尝试使用Dart语言在网站上进行csrftoken时获取GET,并在相同的公开会话中进行一次POST并将其{{1 }}。

在python中,它可以完美工作,因为我在csrftoken

中使用了相同的会话
client = requests.session()

但是使用Dart我已经尝试了一切,并且无法使用同一会话来完成import sys import requests URL = 'https://www.mysite/login/' client = requests.session() # Retrieve the CSRF token first client.get(URL) # sets cookie if 'csrftoken' in client.cookies: # Django 1.6 and up csrftoken = client.cookies['csrftoken'] else: # older versions csrftoken = client.cookies['csrf'] #print(csrftoken) login_data = dict(username='my_username', password='my_password', csrfmiddlewaretoken=csrftoken, next='/') r = client.post(URL, data=login_data, headers=dict(Referer=URL)) print(client.cookies.get_dict()) GET

下面的代码是我正在尝试的,但是没有成功。

POST

import 'dart:convert'; import 'dart:io'; import 'package:html/dom.dart'; import 'package:html/parser.dart' as parser; import 'dart:async'; import 'package:http/http.dart' as http; String extractCSRF(Map response) { Map headers = response; String str = headers['set-cookie']; RegExp exp = new RegExp(r"csrftoken=([\w]+)"); var matches = exp.firstMatch(str); String csrftoken = matches.group(1); return csrftoken; } void main() async { String URL = 'https://www.mysite/login/'; var client = new http.Client(); client.get(Uri.parse(url)) .then((response) => client.post( Uri.parse(url), body: { "username": 'my_username', "password": 'my_password', "csrfmiddlewaretoken": extractCSRF(response.headers), 'next': '/' }, headers: {'Cookie': 'Referer=' + URL} ) ) .then((response) => print(response.headers)) //headers does not have sessionid .whenComplete(client.close); } 的{​​{1}}中,甚至没有我使用相同的response.headers

如何打开会话,进行POST,获取sessionid,然后对client进行GET?在Python中,这非常简单,但使用Dart却无法实现。

有人会解决吗?

0 个答案:

没有答案