Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

httpx is deleting url query parameters that do not explicitly specify a value #2331

Closed
fastily opened this issue Aug 4, 2022 · 5 comments · Fixed by #2354
Closed

httpx is deleting url query parameters that do not explicitly specify a value #2331

fastily opened this issue Aug 4, 2022 · 5 comments · Fixed by #2354

Comments

@fastily
Copy link

fastily commented Aug 4, 2022

The following program

import asyncio
import httpx

async def main():
    async with httpx.AsyncClient() as client:
        r = await client.get("https://httpbin.org/get?foobar", params={'hello': "world"})
        print(r.url)

asyncio.run(main())

should print https://httpbin.org/get?hello=world&foobar

However, the actual output is https://httpbin.org/get?hello=world

It appears that httpx is deleting url query parameters that do not explicitly specify a value.

Thanks for having a look

@blablatdinov
Copy link

Good afternoon!

This case reproduce in httpx.Client. If such behaviour is bug, I want to fix it

@tomchristie
Copy link
Member

It appears that httpx is deleting url query parameters that do not explicitly specify a value.

To determine if your assessment here is correct, try the same example but with foobar=something.

@blablatdinov
Copy link

blablatdinov commented Aug 5, 2022

@tomchristie you're right if use key-value pair in url, it's work. But what to do in case of query param without value (only key). In this discussion I found the opinion, that query can contain query param wiithout value

@fastily
Copy link
Author

fastily commented Aug 6, 2022

It appears that httpx is deleting url query parameters that do not explicitly specify a value.

To determine if your assessment here is correct, try the same example but with foobar=something.

It works fine? That isn't related to the bug I'm reporting however. Have you tried running my example? Url parameters that do not have an explicit value are being deleted.

@tomchristie
Copy link
Member

To determine if your assessment here is correct, try the same example but with foobar=something.

It works fine? That isn't related to the bug I'm reporting however.

Great, so we've determined that your assessment is correct. This is specifically occurring for parameters without a value.

So, yes, that looks broken to me.

Confirmed this to myself with...

import httpx

r = httpx.get("https://httpbin.org/get?foobar", params={'hello': "world"})
print(r.request.url)  # https://httpbin.org/get?hello=world

r = httpx.get("https://httpbin.org/get?foobar=abc", params={'hello': "world"})
print(r.request.url)  # https://httpbin.org/get?foobar=abc&hello=world

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants