11import type { BaseHttpClient as BaseHttpClientInterface , SendRequestOptions } from '@crawlee/types' ;
22import { CookieJar } from 'tough-cookie' ;
33
4+ import type { Log } from '@apify/log' ;
5+ import defaultLog from '@apify/log' ;
6+
47export interface CustomFetchOptions {
58 proxyUrl ?: string ;
69}
@@ -11,25 +14,43 @@ export interface CustomFetchOptions {
1114 * implement only the low-level network call in `fetch`.
1215 */
1316export abstract class BaseHttpClient implements BaseHttpClientInterface {
17+ protected log : Log ;
18+
19+ constructor ( log ?: Log ) {
20+ this . log = log ?? defaultLog ;
21+ }
22+
1423 /**
1524 * Perform the raw network request and return a single Response without any
1625 * automatic redirect following or special error handling.
1726 */
1827 protected abstract fetch ( input : Request , init ?: RequestInit & CustomFetchOptions ) : Promise < Response > ;
1928
2029 private async applyCookies ( request : Request , cookieJar : CookieJar ) : Promise < Request > {
21- const cookies = ( await cookieJar . getCookies ( request . url ) ) . map ( ( x ) => x . cookieString ( ) . trim ( ) ) . filter ( Boolean ) ;
30+ try {
31+ const cookies = ( await cookieJar . getCookies ( request . url ) )
32+ . map ( ( x ) => x . cookieString ( ) . trim ( ) )
33+ . filter ( Boolean ) ;
2234
23- if ( cookies ?. length > 0 ) {
24- request . headers . set ( 'cookie' , cookies . join ( '; ' ) ) ;
35+ if ( cookies ?. length > 0 ) {
36+ request . headers . set ( 'cookie' , cookies . join ( '; ' ) ) ;
37+ }
38+ } catch ( e ) {
39+ this . log . warning ( `Failed to get cookies for URL "${ request . url } ": ${ ( e as Error ) . message } ` ) ;
2540 }
2641 return request ;
2742 }
2843
2944 private async setCookies ( response : Response , cookieJar : CookieJar ) : Promise < void > {
3045 const setCookieHeaders = response . headers . getSetCookie ( ) ;
3146
32- await Promise . all ( setCookieHeaders . map ( ( header ) => cookieJar . setCookie ( header , response . url ) ) ) ;
47+ for ( const header of setCookieHeaders ) {
48+ try {
49+ await cookieJar . setCookie ( header , response . url ) ;
50+ } catch ( e ) {
51+ this . log . warning ( `Failed to set cookie for URL "${ response . url } ": ${ ( e as Error ) . message } ` ) ;
52+ }
53+ }
3354 }
3455
3556 private resolveRequestContext ( options ?: SendRequestOptions ) : {
0 commit comments