我正在尝试直接在网址中将JSON传递给communicate with the Ecobe API。无论我如何尝试格式化数据,它都会在URL中转义。请求过去允许您在调用中传递配置参数,并且可以选择关闭编码,但它已被删除(因此answer in this thread不再起作用)。我在文档中看到的唯一参考是requests.defaults中的某些内容,但我无法弄清楚如何设置它。因此,我的网址将所有JSON格式设置为网址转义,而不是像API那样:
GET https://api.ecobee.com/1/runtimeReport?format=json&body={"startDate": "2010-01-01","endDate": "2010-01-02","columns": "zoneHVACmode,zoneCalendarEvent","selection":{"selectionType":"thermostats","selectionMatch": 123456789012"}}
此外,我已经尝试了足够的霰弹枪方法(包括one in this thread)我不确定如果它确实有效,最好/最有效的方法是什么,所以这里(缩写版本)我的当前代码,以防有更好的选择:
self.api_url = 'https://api.ecobee.com/%s?format=json&%s'
data = {
'startDate': start_date.strftime('%Y-%m-%d'),
'endDate': end_date.strftime('%Y-%m-%d'),
'columns': 'auxHeat1,compCool1,outdoorHumidity,zoneAveTemp,zoneCoolTemp,zoneHeatTemp',
'includeSensors': 'true',
'selection': self.selection_info
}
endpoint = 'runtimeReport'
params_json = simplejson.dumps(params)
response = requests.get(self.api_url % (endpoint, params_json), headers=self._get_headers())
答案 0 :(得分:0)
看起来不再可以了。每个网址都会通过requote_uri in utils.py传递。除非我遗漏了某些东西,否则这个API希望JSON在GET参数中包含空格这一事实是个坏主意。