我正在尝试使用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却无法实现。
有人会解决吗?