undici icon indicating copy to clipboard operation
undici copied to clipboard

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

Open masoudesm opened this issue 1 year ago • 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.

masoudesm avatar May 21 '24 12:05 masoudesm

I can do it, if it is possible.

masoudesm avatar May 21 '24 12:05 masoudesm

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

metcoder95 avatar May 21 '24 20:05 metcoder95

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.

masoudesm avatar May 22 '24 09:05 masoudesm

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

ronag avatar May 22 '24 10:05 ronag

Yes I know, but I would prefer to not, when the library is doing it, I was wondering if there could be an option that could be passed to not encode the url?

masoudesm avatar Jul 15 '24 08:07 masoudesm

Maybe we should consider to pass a queryparser as an option?

Uzlopak avatar Jul 15 '24 08:07 Uzlopak

I was wondering if there could be an option that could be passed to not encode the url?

I don't think we want to maintain special code for bad behaving servers. You will need to do this "hack" in user space.

ronag avatar Jul 15 '24 08:07 ronag