nomagick commited on
Commit
26f6202
·
unverified ·
1 Parent(s): 89e5dbb

fix: curl cookie mimicking

Browse files
Files changed (1) hide show
  1. src/services/curl.ts +25 -7
src/services/curl.ts CHANGED
@@ -115,15 +115,33 @@ export class CurlControl extends AsyncService {
115
 
116
  const headersToSet = { ...crawlOpts?.extraHeaders };
117
  if (crawlOpts?.cookies?.length) {
118
- const cookieChunks = crawlOpts.cookies.filter((x)=> {
119
- if (x.maxAge && x.maxAge < 0) {
120
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
122
- if (x.expires && x.expires < new Date()) {
123
- return false;
 
124
  }
125
- return true;
126
- }).map((cookie) => `${cookie.name}=${encodeURIComponent(cookie.value)}`);
 
 
 
 
127
  headersToSet.cookie ??= cookieChunks.join('; ');
128
  }
129
  if (crawlOpts?.referer) {
 
115
 
116
  const headersToSet = { ...crawlOpts?.extraHeaders };
117
  if (crawlOpts?.cookies?.length) {
118
+ const cookieKv: Record<string, string> = {};
119
+ for (const cookie of crawlOpts.cookies) {
120
+ cookieKv[cookie.name] = cookie.value;
121
+ }
122
+ for (const cookie of crawlOpts.cookies) {
123
+ if (cookie.maxAge && cookie.maxAge < 0) {
124
+ delete cookieKv[cookie.name];
125
+ continue;
126
+ }
127
+ if (cookie.expires && cookie.expires < new Date()) {
128
+ delete cookieKv[cookie.name];
129
+ continue;
130
+ }
131
+ if (cookie.secure && urlToCrawl.protocol !== 'https:') {
132
+ delete cookieKv[cookie.name];
133
+ continue;
134
  }
135
+ if (cookie.domain && !urlToCrawl.hostname.endsWith(cookie.domain)) {
136
+ delete cookieKv[cookie.name];
137
+ continue;
138
  }
139
+ if (cookie.path && !urlToCrawl.pathname.startsWith(cookie.path)) {
140
+ delete cookieKv[cookie.name];
141
+ continue;
142
+ }
143
+ }
144
+ const cookieChunks = Object.entries(cookieKv).map(([k, v]) => `${k}=${encodeURIComponent(v)}`);
145
  headersToSet.cookie ??= cookieChunks.join('; ');
146
  }
147
  if (crawlOpts?.referer) {