Python 请求包含有值的参数和没有值的参数

Olu*_*ide 5 python python-requests

我正在为 API 编写一个 Python 包装器,该 API 支持具有值的查询参数(例如下面)和没有值的param1查询参数(例如下面),即param2

https://example.com/service?param1=value1&param2
Run Code Online (Sandbox Code Playgroud)

HTTP 请求库以支持带值参数和不带值参数而闻名。但是我需要能够指定这两种类型的参数。

Ste*_*eve 9

就查询字符串而言,请求有两个选项:1)通过字典提供键/值对,或 2)提供字符串。如果你提供#1,你总是会为每个键/值对得到一个“=”......这不是你想要的。所以你必须使用#2,它可以让你做任何你想做的事情,因为它只包含你给它的整个查询字符串。缺点是您必须自己构造查询字符串。当然,有很多方法可以做到这一点。这是一种方法:

params = {'param1': 'value1', 'param2': None}
params = '&'.join([k if v is None else f"{k}={v}" for k, v in params.items()])
r = requests.get('https://example.com/service', params=params)
print(r.url)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以提供一个字典,就像您让 Requests 构建查询字符串一样,但它允许您指定一个 值Null来指示您只需要键名,而不需要“=”。None如果参数的值在字典中,则请求通常根本不包含该参数。

这段代码的结果正是您作为示例给出的结果:

https://example.com/service?param1=value1&param2
Run Code Online (Sandbox Code Playgroud)