Skip to content

Commit efac644

Browse files
authored
fix: certain redirect responses change request methods (#3296)
Aligns the `@crawlee/impit-client` implementation with the respective RFC and browsers' behaviour. Closes #2586
1 parent c647a8b commit efac644

File tree

3 files changed

+51
-39
lines changed

3 files changed

+51
-39
lines changed

packages/impit-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
},
6161
"dependencies": {
6262
"@apify/datastructures": "^2.0.3",
63-
"impit": "^0.7.0",
63+
"impit": "^0.7.3",
6464
"tough-cookie": "^6.0.0"
6565
}
6666
}

packages/impit-client/src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,17 @@ export class ImpitHttpClient implements BaseHttpClient {
9898
return body as any;
9999
}
100100

101+
private shouldRewriteRedirectToGet(httpStatus: number, method: HttpRequest<any>['method']): boolean {
102+
// See https://github.com/mozilla-firefox/firefox/blob/911b3eec6c5e58a9a49e23aa105e49aa76e00f9c/netwerk/protocol/http/HttpBaseChannel.cpp#L4801
103+
if ([301, 302].includes(httpStatus)) {
104+
return method === 'POST';
105+
}
106+
107+
if (httpStatus === 303) return method !== 'HEAD';
108+
109+
return false;
110+
}
111+
101112
/**
102113
* Common implementation for `sendRequest` and `stream` methods.
103114
* @param request `HttpRequest` object
@@ -141,6 +152,7 @@ export class ImpitHttpClient implements BaseHttpClient {
141152
return this.getResponse(
142153
{
143154
...request,
155+
method: this.shouldRewriteRedirectToGet(response.status, request.method) ? 'GET' : request.method,
144156
url: redirectUrl.href,
145157
},
146158
{

yarn.lock

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ __metadata:
618618
dependencies:
619619
"@apify/datastructures": "npm:^2.0.3"
620620
"@crawlee/core": "npm:^3.15.3"
621-
impit: "npm:^0.7.0"
621+
impit: "npm:^0.7.3"
622622
tough-cookie: "npm:^6.0.0"
623623
peerDependencies:
624624
"@crawlee/core": ^3.12.1
@@ -7487,9 +7487,9 @@ __metadata:
74877487
languageName: node
74887488
linkType: hard
74897489

7490-
"impit-darwin-arm64@npm:0.7.0":
7491-
version: 0.7.0
7492-
resolution: "impit-darwin-arm64@npm:0.7.0"
7490+
"impit-darwin-arm64@npm:0.7.3":
7491+
version: 0.7.3
7492+
resolution: "impit-darwin-arm64@npm:0.7.3"
74937493
conditions: os=darwin & cpu=arm64
74947494
languageName: node
74957495
linkType: hard
@@ -7501,9 +7501,9 @@ __metadata:
75017501
languageName: node
75027502
linkType: hard
75037503

7504-
"impit-darwin-x64@npm:0.7.0":
7505-
version: 0.7.0
7506-
resolution: "impit-darwin-x64@npm:0.7.0"
7504+
"impit-darwin-x64@npm:0.7.3":
7505+
version: 0.7.3
7506+
resolution: "impit-darwin-x64@npm:0.7.3"
75077507
conditions: os=darwin & cpu=x64
75087508
languageName: node
75097509
linkType: hard
@@ -7515,9 +7515,9 @@ __metadata:
75157515
languageName: node
75167516
linkType: hard
75177517

7518-
"impit-linux-arm64-gnu@npm:0.7.0":
7519-
version: 0.7.0
7520-
resolution: "impit-linux-arm64-gnu@npm:0.7.0"
7518+
"impit-linux-arm64-gnu@npm:0.7.3":
7519+
version: 0.7.3
7520+
resolution: "impit-linux-arm64-gnu@npm:0.7.3"
75217521
conditions: os=linux & cpu=arm64 & libc=glibc
75227522
languageName: node
75237523
linkType: hard
@@ -7529,9 +7529,9 @@ __metadata:
75297529
languageName: node
75307530
linkType: hard
75317531

7532-
"impit-linux-arm64-musl@npm:0.7.0":
7533-
version: 0.7.0
7534-
resolution: "impit-linux-arm64-musl@npm:0.7.0"
7532+
"impit-linux-arm64-musl@npm:0.7.3":
7533+
version: 0.7.3
7534+
resolution: "impit-linux-arm64-musl@npm:0.7.3"
75357535
conditions: os=linux & cpu=arm64 & libc=musl
75367536
languageName: node
75377537
linkType: hard
@@ -7543,9 +7543,9 @@ __metadata:
75437543
languageName: node
75447544
linkType: hard
75457545

7546-
"impit-linux-x64-gnu@npm:0.7.0":
7547-
version: 0.7.0
7548-
resolution: "impit-linux-x64-gnu@npm:0.7.0"
7546+
"impit-linux-x64-gnu@npm:0.7.3":
7547+
version: 0.7.3
7548+
resolution: "impit-linux-x64-gnu@npm:0.7.3"
75497549
conditions: os=linux & cpu=x64 & libc=glibc
75507550
languageName: node
75517551
linkType: hard
@@ -7557,9 +7557,9 @@ __metadata:
75577557
languageName: node
75587558
linkType: hard
75597559

7560-
"impit-linux-x64-musl@npm:0.7.0":
7561-
version: 0.7.0
7562-
resolution: "impit-linux-x64-musl@npm:0.7.0"
7560+
"impit-linux-x64-musl@npm:0.7.3":
7561+
version: 0.7.3
7562+
resolution: "impit-linux-x64-musl@npm:0.7.3"
75637563
conditions: os=linux & cpu=x64 & libc=musl
75647564
languageName: node
75657565
linkType: hard
@@ -7571,9 +7571,9 @@ __metadata:
75717571
languageName: node
75727572
linkType: hard
75737573

7574-
"impit-win32-arm64-msvc@npm:0.7.0":
7575-
version: 0.7.0
7576-
resolution: "impit-win32-arm64-msvc@npm:0.7.0"
7574+
"impit-win32-arm64-msvc@npm:0.7.3":
7575+
version: 0.7.3
7576+
resolution: "impit-win32-arm64-msvc@npm:0.7.3"
75777577
conditions: os=win32 & cpu=arm64
75787578
languageName: node
75797579
linkType: hard
@@ -7585,9 +7585,9 @@ __metadata:
75857585
languageName: node
75867586
linkType: hard
75877587

7588-
"impit-win32-x64-msvc@npm:0.7.0":
7589-
version: 0.7.0
7590-
resolution: "impit-win32-x64-msvc@npm:0.7.0"
7588+
"impit-win32-x64-msvc@npm:0.7.3":
7589+
version: 0.7.3
7590+
resolution: "impit-win32-x64-msvc@npm:0.7.3"
75917591
conditions: os=win32 & cpu=x64
75927592
languageName: node
75937593
linkType: hard
@@ -7625,18 +7625,18 @@ __metadata:
76257625
languageName: node
76267626
linkType: hard
76277627

7628-
"impit@npm:^0.7.0":
7629-
version: 0.7.0
7630-
resolution: "impit@npm:0.7.0"
7631-
dependencies:
7632-
impit-darwin-arm64: "npm:0.7.0"
7633-
impit-darwin-x64: "npm:0.7.0"
7634-
impit-linux-arm64-gnu: "npm:0.7.0"
7635-
impit-linux-arm64-musl: "npm:0.7.0"
7636-
impit-linux-x64-gnu: "npm:0.7.0"
7637-
impit-linux-x64-musl: "npm:0.7.0"
7638-
impit-win32-arm64-msvc: "npm:0.7.0"
7639-
impit-win32-x64-msvc: "npm:0.7.0"
7628+
"impit@npm:^0.7.3":
7629+
version: 0.7.3
7630+
resolution: "impit@npm:0.7.3"
7631+
dependencies:
7632+
impit-darwin-arm64: "npm:0.7.3"
7633+
impit-darwin-x64: "npm:0.7.3"
7634+
impit-linux-arm64-gnu: "npm:0.7.3"
7635+
impit-linux-arm64-musl: "npm:0.7.3"
7636+
impit-linux-x64-gnu: "npm:0.7.3"
7637+
impit-linux-x64-musl: "npm:0.7.3"
7638+
impit-win32-arm64-msvc: "npm:0.7.3"
7639+
impit-win32-x64-msvc: "npm:0.7.3"
76407640
dependenciesMeta:
76417641
impit-darwin-arm64:
76427642
optional: true
@@ -7654,7 +7654,7 @@ __metadata:
76547654
optional: true
76557655
impit-win32-x64-msvc:
76567656
optional: true
7657-
checksum: 10c0/bd5887db006b68913de1480da47379f4de11cbc7ba9725fd0106faca993eaa16a7a13e9869cc641790880dd044a07f7ce6312848d05555a98b266487e0740f57
7657+
checksum: 10c0/8a7138303b5ea01d59e35c678e8c4a1483db1af722e1f747bf7c3635f86edcc51d49d8949820fd74993a041903d9fd29a57547cfe904a0bb5e9295e9c7269bf3
76587658
languageName: node
76597659
linkType: hard
76607660

0 commit comments

Comments
 (0)