Table of Contents
Introduction
Parser for the comma joined set-header cookie header that the http package gives back. The CookieParser will accept that singular header value and then attempt to parse it back into the original separated values.
Usage
import 'package:http/http.dart' as http;
import 'package:http_cookie_parser/http_cookie_parser.dart';
Future<void> load() async {
final response = await http.get('https://www.cnn.com'); // CNN is known to have troublesome cookies
final cookies = CookieParser(response.headers['set-cookie']).cookies;
// Now you can do whatever you need as each element in the cookies array is an
// individual cookie value again.
}
Why is this necessary?
Cookie values can contain commas within them. In fact, the Expires value is spec'd to have one in it. Let's say you get back the cookies from the server:
set-cookie: foo=bar; Expires=Expires=Fri, 20 Aug 2027 00:55:08 GMT; HttpOnly
set-cookie: commas=a,b,c,d; HttpOnly
Then what you will get back from the http package when you query the set-cookie header is actually:
foo=bar; Expires=Expires=Fri, 20 Aug 2027 00:55:08 GMT,commas=a,b,c,d; HttpOnly
Try to do a value.split(',') and you get:
[
'foo=bar; Expires=Expires=Fri',
'20 Aug 2027 00:55:08 GMT',
'HttpOnly',
'commas=a',
'b',
'c',
'd; HttpOnly'
]
Try to parse those items using any standard cookie decoder and you're toing to get a parse error.