Python如何使用字典传递URL参数正确调用API?
问题原因
你的第二段代码无法运行是两个核心写法错误导致的:
- 你在URL里写的
{symbols}、{base}是字符串占位符,requests库不会自动替换这类占位符,你也没有手动调用字符串格式化方法填充值 - GET请求的URL查询参数不能通过
data参数传递:data参数是用来传递POST/PUT等请求的请求体内容的,且你错误地把参数字典包裹在了列表里,格式本身也不对
正确写法
requests库专门提供了params参数用来传递URL查询参数,传普通字典即可,库会自动完成URL拼接、特殊字符编码的工作,不需要你手动在URL里写查询串或者占位符:
import requests # 只写接口基础路径,不需要拼接?后面的查询内容 url = "https://api.apilayer.com/fixer/latest" # 查询参数直接定义为普通字典,不要套列表 query_params = { "base": "USD", "symbols": "GBP" } headers = { "apikey": "*****" } # 通过params参数传递查询字典,GET请求可以直接用requests.get简写 response = requests.get(url, headers=headers, params=query_params) status_code = response.status_code result = response.text print(result)
额外说明
- 用
params传参时,requests会自动对参数里的特殊字符(比如中文、&、=、空格等)做URL编码,比手动拼接URL的容错性、安全性高很多,完全避免拼接格式错误的问题 - 如果你坚持要手动拼接URL(极度不推荐,仅作原理演示),需要手动调用字符串格式化方法填充占位符,且需要自己处理参数编码:
# 不推荐写法,遇到特殊字符极易出错 url = "https://api.apilayer.com/fixer/latest?symbols={symbols}&base={base}".format(symbols="GBP", base="USD")
内容的提问来源于stack exchange,提问作者corey
相关产品推荐
相关产品推荐

