Python API 调用中的动态负载
Dynamic payload in Python API Call
背景:
我正在尝试进行 API 调用,其中必须包含有效负载。有效负载包含 2 个日期密钥对值,这些值以前是固定值,我试图将其动态化,因此它们始终是当前日期。
代码: 这是我的代码,它试图使 start_date
和 end_date
值动态化:
def job_initializer():
key, secret, url = ini_reader()
start_date = dt.datetime.today().strftime("%Y-%m-%d")
end_date = dt.datetime.today().strftime("%Y-%m-%d")
payload ="""
{
"data":{
"type":"jobs",
"attributes":{
"job_type":"portfolio_view_results",
"parameters":{
"view_id":"304078",
"portfolio_type":"firm",
"portfolio_id":"1",
"output_type":"json",
"start_date":"%s",
"end_date":"%s"
}
}
}
}
""" %(start_date, end_date)
d = {'payload': payload}
payload = json.dumps(d)
headers = {"Accept": "application/vnd.api+json", "Content-Type": "application/vnd.api+json", "firm": "381"}
response = requests.post(url, auth=HTTPBasicAuth(key, secret), headers=headers, json=payload)
print(response)
return(response.json())
job_initializer()
问题: 如果我硬编码日期值(例如 "start_date": "2021-01-01"
),我的代码/API 调用工作正常,但是,当我尝试使价值动态我得到一个 -
<Response [400]>
{'errors': [{'status': '400',
'title': 'Bad Request',
'detail': 'Missing data field'}]}
观察: 我尝试通过 print(payload)
进行调试,我注意到动态标签正在工作,但是格式看起来有点不对劲,这可能是原因对于这个问题。只是说出来,以防它有助于帮助我解决问题
{"payload": "\n \n {\n \"data\":{\n \"type\":\"jobs\",\n \"attributes\":{\n \"job_type\":\"portfolio_view_results\",\n \"parameters\":{\n \"view_id\":\"304078\",\n \"portfolio_type\":\"firm\",\n \"portfolio_id\":\"1\",\n \"output_type\":\"json\",\n \"start_date\":\"2022-01-10\",\n \"end_date\":\"2022-01-10\"\n }\n }\n }\n }\n ", "variables": {}}
有人知道我的代码遗漏了什么吗?
不太明白你目前的问题是什么。您的代码似乎有效。您的问题是为什么会出现 400 错误?
由于缺少 data
,我猜该请求不会占用您的负载。您可以尝试将 Content-Type 设置为 application/json
或将请求参数从 json
更改为 data
.
示例:
r = requests.post(base_url, headers=headers, data=d)
背景: 我正在尝试进行 API 调用,其中必须包含有效负载。有效负载包含 2 个日期密钥对值,这些值以前是固定值,我试图将其动态化,因此它们始终是当前日期。
代码: 这是我的代码,它试图使 start_date
和 end_date
值动态化:
def job_initializer():
key, secret, url = ini_reader()
start_date = dt.datetime.today().strftime("%Y-%m-%d")
end_date = dt.datetime.today().strftime("%Y-%m-%d")
payload ="""
{
"data":{
"type":"jobs",
"attributes":{
"job_type":"portfolio_view_results",
"parameters":{
"view_id":"304078",
"portfolio_type":"firm",
"portfolio_id":"1",
"output_type":"json",
"start_date":"%s",
"end_date":"%s"
}
}
}
}
""" %(start_date, end_date)
d = {'payload': payload}
payload = json.dumps(d)
headers = {"Accept": "application/vnd.api+json", "Content-Type": "application/vnd.api+json", "firm": "381"}
response = requests.post(url, auth=HTTPBasicAuth(key, secret), headers=headers, json=payload)
print(response)
return(response.json())
job_initializer()
问题: 如果我硬编码日期值(例如 "start_date": "2021-01-01"
),我的代码/API 调用工作正常,但是,当我尝试使价值动态我得到一个 -
<Response [400]>
{'errors': [{'status': '400',
'title': 'Bad Request',
'detail': 'Missing data field'}]}
观察: 我尝试通过 print(payload)
进行调试,我注意到动态标签正在工作,但是格式看起来有点不对劲,这可能是原因对于这个问题。只是说出来,以防它有助于帮助我解决问题
{"payload": "\n \n {\n \"data\":{\n \"type\":\"jobs\",\n \"attributes\":{\n \"job_type\":\"portfolio_view_results\",\n \"parameters\":{\n \"view_id\":\"304078\",\n \"portfolio_type\":\"firm\",\n \"portfolio_id\":\"1\",\n \"output_type\":\"json\",\n \"start_date\":\"2022-01-10\",\n \"end_date\":\"2022-01-10\"\n }\n }\n }\n }\n ", "variables": {}}
有人知道我的代码遗漏了什么吗?
不太明白你目前的问题是什么。您的代码似乎有效。您的问题是为什么会出现 400 错误?
由于缺少 data
,我猜该请求不会占用您的负载。您可以尝试将 Content-Type 设置为 application/json
或将请求参数从 json
更改为 data
.
示例:
r = requests.post(base_url, headers=headers, data=d)