Repository: encode/httpx

Issue:
httpx is deleting url query parameters that do not explicitly specify a value
The following program
```python
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

Discussion:

Patch:
diff --git a/httpx/_urls.py b/httpx/_urls.py
index cf4df38..1211bbb 100644
--- a/httpx/_urls.py
+++ b/httpx/_urls.py
@@ -540,7 +540,7 @@ class QueryParams(typing.Mapping[str, str]):
         items: typing.Sequence[typing.Tuple[str, PrimitiveData]]
         if value is None or isinstance(value, (str, bytes)):
             value = value.decode("ascii") if isinstance(value, bytes) else value
-            self._dict = parse_qs(value)
+            self._dict = parse_qs(value, keep_blank_values=True)
         elif isinstance(value, QueryParams):
             self._dict = {k: list(v) for k, v in value._dict.items()}
         else:


Test patch:
diff --git a/tests/models/test_queryparams.py b/tests/models/test_queryparams.py
index ba200f1..29b2ca6 100644
--- a/tests/models/test_queryparams.py
+++ b/tests/models/test_queryparams.py
@@ -76,6 +76,17 @@ def test_queryparam_types():
     assert str(q) == "a=1&a=2"
 
 
+def test_empty_query_params():
+    q = httpx.QueryParams({"a": ""})
+    assert str(q) == "a="
+
+    q = httpx.QueryParams("a=")
+    assert str(q) == "a="
+
+    q = httpx.QueryParams("a")
+    assert str(q) == "a="
+
+
 def test_queryparam_update_is_hard_deprecated():
     q = httpx.QueryParams("a=123")
     with pytest.raises(RuntimeError):