使用requests发起GET请求时如何传递多个contract_types参数?
解决Delta Exchange API多参数传递问题
问题原因分析
- 手动拼接URL时,逗号后多了空格,导致API将
put_options(带前导空格)识别为无效值,仅返回call_options的结果。 - 使用
params参数时写法错误:{call_options,put_options}是集合而非字典,且call_options未定义为变量,不符合requests的参数传递规范。
可行解决方法
方法1:修正手动拼接的URL(移除空格)
直接去掉逗号后的空格,确保参数值格式符合API要求:
import requests r = requests.get('https://api.delta.exchange/v2/tickers?contract_types=call_options,put_options')
方法2:使用requests的params参数(推荐)
用字典传递参数,更规范且避免URL拼接错误:
import requests url = 'https://api.delta.exchange/v2/tickers' # 方式A:逗号分隔的字符串(符合API文档要求) params = {'contract_types': 'call_options,put_options'} r = requests.get(url, params=params) # 方式B:部分API支持重复参数名,可传列表让requests自动拼接为contract_types=call_options&contract_types=put_options # 若方式A无效可尝试此方法 # params = {'contract_types': ['call_options', 'put_options']} # r = requests.get(url, params=params)
错误写法说明
你之前用的request.get(url, params={call_options,put_options})存在两个问题:
- 这里的
{}定义的是集合,而requests要求params是字典类型(键为参数名,值为参数值)。 call_options和put_options是字符串字面量,需要加引号,否则会被当作未定义的变量,引发报错。
内容的提问来源于stack exchange,提问作者kappamachine
相关产品推荐
相关产品推荐

