如何为requests.get命令传递日期参数以获取API天气数据?
把curl命令转成requests.get调用的解决方案
我来帮你把这个curl命令转换成Python的requests调用,搞定日期参数传递和认证的问题~
首先先拆解下你原来的curl命令里的关键部分:
-G参数是告诉curl把-d后面的参数拼成URL的查询字符串(也就是GET请求的参数),而不是用POST方式发送-d start="2018-04-01" -d end="2018-04-04"就是你要传递的日期范围参数--user abcd:1234是Basic HTTP认证,curl会自动把这个转换成Authorization请求头
对应到requests.get里,我们只需要把这些部分对应好就行,直接上代码:
import requests # 目标API地址,对应curl里的"http://url.com/lat/long" api_url = "http://url.com/lat/long" # 日期参数,对应curl里的-d参数,因为用了-G,所以这里要放到params里 date_params = { "start": "2018-04-01", "end": "2018-04-04" } # Basic认证信息,对应curl里的--user参数,直接传(用户名, 密码)元组就行,requests会自动处理认证头 auth_credentials = ("abcd", "1234") # 发送GET请求 try: response = requests.get(api_url, params=date_params, auth=auth_credentials) # 检查请求是否成功(如果HTTP状态码不是200系列会抛出异常) response.raise_for_status() # 假设返回的是JSON数据,解析出来 historical_weather = response.json() print("获取到历史天气数据:", historical_weather) except requests.exceptions.RequestException as e: print(f"请求失败啦:{e}")
关键对应点说明:
- 你原来的curl用了
-G,所以不能把日期参数放到data里(那会变成POST请求),必须用params参数,requests会自动把字典拼到URL后面,和-G的效果一致 auth参数直接传元组比手动构造Authorization头方便多了,requests会帮你处理编码的问题- 如果你的API返回的不是JSON,也可以用
response.text获取文本内容,或者response.content获取二进制数据
这样替换掉原来的subprocess调用curl的方式,不仅更Pythonic,也更容易处理响应数据和错误哦~
内容的提问来源于stack exchange,提问作者pewpewpew
相关产品推荐
相关产品推荐

