Support non-standard Cookies (#745)

This commit is contained in:
Boris Verkhovskiy 2025-06-08 03:22:51 -07:00 committed by GitHub
parent 8263e92e29
commit b454b1c4f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 19 deletions

View File

@ -301,7 +301,7 @@ export class Headers implements Iterable<[Word, Word | null]> {
export type Cookie = [Word, Word];
export type Cookies = Array<Cookie>;
export function parseCookiesStrict(cookieString: Word): Cookies | null {
export function parseCookies(cookieString: Word): Cookies | null {
const cookies: Cookies = [];
for (let cookie of cookieString.split(";")) {
cookie = cookie.replace(/^ /, "");
@ -316,19 +316,3 @@ export function parseCookiesStrict(cookieString: Word): Cookies | null {
}
return cookies;
}
export function parseCookies(cookieString: Word): Cookies | null {
const cookies: Cookies = [];
for (let cookie of cookieString.split(";")) {
cookie = cookie.trim();
if (!cookie) {
continue;
}
const [name, value] = cookie.split("=", 2);
cookies.push([name.trim(), (value || "").trim()]);
}
if (new Set(cookies.map((c) => c[0])).size !== cookies.length) {
return null;
}
return cookies;
}

View File

@ -9,7 +9,7 @@ import type {
SrcDataParam,
} from "./curl/opts.js";
import { Headers, parseCookies, parseCookiesStrict } from "./Headers.js";
import { Headers, parseCookies } from "./Headers.js";
import type { Cookies } from "./Headers.js";
import { pickAuth, type AuthType } from "./curl/auth.js";
@ -803,7 +803,7 @@ function buildRequest(
const cookieFiles: Word[] = [];
const cookieHeader = headers.get("cookie");
if (cookieHeader) {
const parsedCookies = parseCookiesStrict(cookieHeader);
const parsedCookies = parseCookies(cookieHeader);
if (parsedCookies) {
cookies = parsedCookies;
}

View File

@ -0,0 +1,3 @@
#!/usr/bin/env sh
curl -i 'http://localhost:8888/' -b 'a=b; c'

7
test/fixtures/python/broken_cookie.py generated vendored Normal file
View File

@ -0,0 +1,7 @@
import requests
headers = {
'Cookie': 'a=b; c',
}
response = requests.get('http://localhost:8888/', headers=headers)