2

我正在尝试直接在 URL 中传递 JSON 以与 Ecobe API进行通信。无论我如何尝试格式化数据,它都会在 URL 中转义。用于允许您在调用中传递配置参数并且可以选择关闭编码的请求,但它已被删除(因此该线程中的答案不再有效)。我在文档中看到的唯一参考是requests.defaults中的某些内容,但我不知道如何设置它。因此,我的 URL 对所有 JSON 格式的 URL 进行了转义,而不是像 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"}}

此外,我已经尝试了足够多的霰弹枪方法(包括这个线程中的那个)我不确定如果它确实有效,那么最好/最有效的方法是什么,所以这是我当前的代码(一个缩写版本)以防万一有一个更好的选择:

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())
4

1 回答 1

0

看来不能再做了。每个 URL 都通过utils.py 中的 requote_uri传递。除非我遗漏了什么,否则这个 API 需要在 GET 参数中带有空格的 JSON 是一个坏主意。

于 2013-07-31T01:20:18.570 回答