Skip to content

Commit 428bbd8

Browse files
authored
Add default URL length to convert GET to POST (#1226)
* default to 2000 if maxUrlLength is not set * mock arcgis feature set
1 parent d0d568b commit 428bbd8

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

packages/arcgis-rest-request/src/request.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,9 @@ export function internalRequest(
349349
queryParams === "" ? url : url + "?" + encodeQueryString(params);
350350

351351
if (
352-
// This would exceed the maximum length for URLs specified by the consumer and requires POST
353-
(options.maxUrlLength &&
354-
urlWithQueryString.length > options.maxUrlLength) ||
352+
// This would exceed the maximum length for URLs by 2000 as default or as specified by the consumer and requires POST
353+
(options.maxUrlLength && urlWithQueryString.length > options.maxUrlLength) ||
354+
(!options.maxUrlLength && urlWithQueryString.length > 2000) ||
355355
// Or if the customer requires the token to be hidden and it has not already been hidden in the header (for browsers)
356356
(params.token && options.hideToken)
357357
) {

packages/arcgis-rest-request/test/request.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,36 @@ describe("request()", () => {
132132
});
133133
});
134134

135+
it("should switch from GET to POST when url is longer than 2000 by default", (done) => {
136+
fetchMock.once("*", { features: [] });
137+
138+
request(
139+
"https://services1.arcgis.com/ORG/arcgis/rest/services/FEATURE_SERVICE/FeatureServer/0/query",
140+
{
141+
httpMethod: "GET",
142+
params: {
143+
where:
144+
"1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1 AND 1 = 1"
145+
}
146+
}
147+
)
148+
.then((response) => {
149+
const [url, options] = fetchMock.lastCall("*");
150+
expect(url).toEqual(
151+
"https://services1.arcgis.com/ORG/arcgis/rest/services/FEATURE_SERVICE/FeatureServer/0/query"
152+
);
153+
expect(options.method).toBe("POST");
154+
expect(options.body).toContain(
155+
"where=1%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201%20AND%201%20%3D%201"
156+
);
157+
expect(response).toEqual({ features: [] });
158+
done();
159+
})
160+
.catch((e) => {
161+
fail(e);
162+
});
163+
});
164+
135165
it("should switch from GET to POST when url is longer than specified", (done) => {
136166
fetchMock.once("*", SharingRestInfo);
137167
const restInfoUrl = "https://www.arcgis.com/sharing/rest/info";

0 commit comments

Comments
 (0)