nodejs/undici

do not encode with encodeURIComponent if query with method GET passed.

masoudesm opened this issue · 4 comments

I have studied the source code and saw this file lib/core/util.js which there is a function called buildURL and it is using node's querystring which by default is doing encodeURIComponent causing a third party backend that I'm calling to be broken, as I can not ask them to change, so preferably, it would be much nicer in undici we can have a option to disable encodeURIComponent or enable it.

I can do it, if it is possible.

Can you provide an
Minimum Reproducible Example that outlines the behaviour that is leading to the failures?

for example:

API CALL:
import { request, pipeline } from 'undici'; await request('https://jsonplaceholder.typicode.com/comments', { method: 'GET', query: { id: 1, postId: 1, date: '12-10-2024T12:12:40' } })

EXPECTED URL GENERATED:
https://jsonplaceholder.typicode.com/comments?id=1&postId=1&date=12-10-2024T12:12:40

WHAT DEBUG MODE SHOWS:
UNDICI 13726: connecting to jsonplaceholder.typicode.com using https:undefined UNDICI 13726: connected to jsonplaceholder.typicode.com using https:h1 UNDICI 13726: sending request to GET https://jsonplaceholder.typicode.com//comments?id=1&postId=1&date=12-10-2024T12%3A12%3A40 UNDICI 13726: received response to GET https://jsonplaceholder.typicode.com//comments?id=1&postId=1&date=12-10-2024T12%3A12%3A40 - HTTP 200 UNDICI 13726: trailers received from GET https://jsonplaceholder.typicode.com//comments?id=1&postId=1&date=12-10-2024T12%3A12%3A40

HOW TO RUN:
NODE_DEBUG=undici node client.js

as you see it is encoded, this example will work but some server rest implementation (which I would call them bad designed) they don't accept encodedURIComponent in the query string.

ronag commented

If you build the whole url yourself and don't use query you should already be able to do this