Gupshup Post - 空体
Gupshup Post - Empty Body
我正在构建一个简单的机器人,它可以进行 http post 调用并传入 JSON 对象。服务器响应错误 - {"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}:
我认为服务器端不是问题;我已经尝试使用 httpie 请求。
Gupshup中的代码
var contextParam = {
"botname": event.botname,
"channel": event.channel,
"sender": event.sender,
"message":event.message
};
var url = "https://abcserver.com/sm/postData";
var param = JSON.stringify(contextParam);
var header = {"Content-Type": "application/json"};
context.simplehttp.makePost(url, param, header)
对应httpie的调用
http POST https://abcserver.com/sm/postData botname=MrBot channel=Skype sender=MrSender message=Hi
在服务器端:
logger.debug("Request body : " + str(request.body))
将 - "Request body : b'"
放入日志文件。
PS:我正在使用 Django,Django Rest Framework
[答案更新 21/8/2017]
使用 Gupshup 的 IDE Bot Builder 进行 HTTP POST 调用的语法是正确的。在存在工作代码的 SO 上查看此 post 。
完整的工作代码:
var url_ = 'http://p-curl-i.herokuapp.com/getresponse/';
var body = {
"botname": event.botname,
"channel": event.channel,
"sender": event.sender,
"message": event.message
};
var headers = {
'cache-control': 'no-cache',
'content-type': 'application/json',
'Content-Length' : JSON.stringify(body).length
};
context.simplehttp.makePost(url_, JSON.stringify(body), headers);
您需要发送 "Content-Length",因为您的服务器将此设置为强制性的,并且 Gupshup 的后端不会像 Postman 或 httpie 那样默认发送内容长度。
我正在构建一个简单的机器人,它可以进行 http post 调用并传入 JSON 对象。服务器响应错误 - {"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}:
我认为服务器端不是问题;我已经尝试使用 httpie 请求。
Gupshup中的代码
var contextParam = {
"botname": event.botname,
"channel": event.channel,
"sender": event.sender,
"message":event.message
};
var url = "https://abcserver.com/sm/postData";
var param = JSON.stringify(contextParam);
var header = {"Content-Type": "application/json"};
context.simplehttp.makePost(url, param, header)
对应httpie的调用
http POST https://abcserver.com/sm/postData botname=MrBot channel=Skype sender=MrSender message=Hi
在服务器端:
logger.debug("Request body : " + str(request.body))
将 - "Request body : b'"
放入日志文件。
PS:我正在使用 Django,Django Rest Framework
[答案更新 21/8/2017]
使用 Gupshup 的 IDE Bot Builder 进行 HTTP POST 调用的语法是正确的。在存在工作代码的 SO 上查看此 post 。
完整的工作代码:
var url_ = 'http://p-curl-i.herokuapp.com/getresponse/';
var body = {
"botname": event.botname,
"channel": event.channel,
"sender": event.sender,
"message": event.message
};
var headers = {
'cache-control': 'no-cache',
'content-type': 'application/json',
'Content-Length' : JSON.stringify(body).length
};
context.simplehttp.makePost(url_, JSON.stringify(body), headers);
您需要发送 "Content-Length",因为您的服务器将此设置为强制性的,并且 Gupshup 的后端不会像 Postman 或 httpie 那样默认发送内容长度。