包含具有值的参数和不具有值的参数的Python请求

包含具有值的参数和不具有值的参数的Python请求,python,python-requests,Python,Python Requests,我正在为一个API编写Python包装,该API支持具有值的查询参数(例如下面的param1)和不具有值的查询参数(例如下面的param2),即 最著名的是支持带有值和的参数。但是,我需要能够指定这两种类型的参数。对于查询字符串方面的请求,您有两个选项:1)通过字典提供键/值对,或2)提供字符串。如果您提供#1,那么每个键/值对都会得到一个“=”,而不是您想要的。因此必须使用#2,它可以让您做任何您想做的事情,因为它将只包含您作为整个查询字符串提供的内容。缺点是您必须自己构造查询字符串。当然,有

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


最著名的是支持带有值和的参数。但是,我需要能够指定这两种类型的参数。

对于查询字符串方面的请求,您有两个选项: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)
通过这种方式,您可以提供一个字典,就像让请求生成查询字符串一样,但它允许您指定
Null
值,以指示您只需要键名,而不需要“=”。如果字典中的参数值为
None
,则请求通常根本不包括该参数

此代码的结果正是您作为示例给出的您想要的结果:

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)
https://example.com/service?param1=value1&param2