我想对以下端点https://cloud.ibm.com/apidocs/assistant-v2#send-user-input-to-assistant进行API调用
我的代码如下:
public override void OnBackPressed()
{
base.OnBackPressed();
}
我从沃森得到的答复是
session = requests.Session()
session.auth = (WATSON_USERNAME, WATSON_PASSWORD)
data = { "input" : {"text" :"my message"} }
response = session.post(
f'{WATSON_ENDPOINT}/{session_id}/message?{WATSON_API_VER}',
headers={"Content-Type": "application/json"},
data=data)
如果我将{ "error": "Unexpected token i in JSON at position 0", "code":400 }
更改为data
{ "X" : {"text" :"my message"} }
关于为什么无法像API提供的示例那样解析我的{ "error": "Unexpected token X in JSON at position 0", "code":400 }
有效载荷的任何想法?
答案 0 :(得分:3)
您要发送的这个data
有效负载是Python dict
,Requests
会被编码为POST数据
data = { "input" : {"text" :"my message"} }
您正在使用的API需要JSON数据
import data
data = json.dumps(data)
似乎您是从侧边栏构建示例的
curl -u "apikey:{apikey}" -X POST -H "Content-Type:application/json" -d "{\"input\": {\"text\": \"Hello\"}}" "https://gateway.watsonplatform.net/assistant/api/v2/assistants/{assistant_id}/sessions/{session_id}/message?version=2019-02-28"
发送到curl
的数据是经过编码的JSON字符串。
如果您返回该示例网址,则会出现一个下拉列表,其中显示了如何使用Python
软件包在ibm_watson
中进行请求。
答案 1 :(得分:2)
使用json=
参数对带有请求的JSON POST
。
它将自动编码您的数据并添加Content-Type: application/json
标头。
import requests
session = requests.Session()
session.auth = (WATSON_USERNAME, WATSON_PASSWORD)
data = {"input": {"text": "my message"}}
url = f'{WATSON_ENDPOINT}/{session_id}/message?{WATSON_API_VER}'
response = session.post(url, json=data)
print(response.status_code, response.text)
答案 2 :(得分:1)
>>> data = { "input" : {"text" :"my message"} }
>>> data
{'input': {'text': 'my message'}}
>>> type(data)
<class 'dict'>
这是python shell从您的代码中为我带来的关于名为data
的变量的信息。
您可能需要一个字符串,而不是字典。
>>> myvar = '{ "input" : {"text" :"my message"} }'
>>> myvar
'{ "input" : {"text" :"my message"} }'
>>> type(myvar)
<class 'str'>
答案 3 :(得分:1)