我是Coldfusion的新手,无法理解为什么我在使用cfhttp进行的http请求中添加几个标题时遇到了很多麻烦。我尝试使用cfscript编写请求,而且从我读过的所有内容中我都应该能够做到:
httpService.addParam(type="header", name="Content-Type", value="application/json");
或
httpService.addParam(type="header", name="Authorization", value=local.authPasscode);
但传出请求似乎并不包含这些标头。我可以告诉它不工作,因为:
writeDump(GetHttpRequestData())
,其中显示了请求的所有详细信息(此输出根本不显示授权标头,并将Content-Type标头显示为:的multipart / form-data的;边界= ---- WebKitFormBoundaryZs9TyOQV02N3fQop
我似乎也很难以类似的方式添加邮件正文,因此我认为我在addParam()
做错了。我是这样尝试的:
httpService.addParam(type="body", value="hello");
同样,我得到的回复有一堆遗失的字段错误,而writeDump(GetHttpRequestData())
的输出显示缺少正文。
我是否应该能够以这种方式使用addParam()
?
完整代码:
httpService = new http();
httpService.setMethod("POST");
httpService.setUrl(application.config.beanstream.postURL);
local.authPasscode = "Passcode " & ToBase64(application.config.beanstream.merchantid & ":" & application.config.beanstream.APIPasscode, "utf-8");
// Set headers.
httpService.addParam(type="header", name="Authorization", value=local.authPasscode);
httpService.addParam(type="header", name="Content-Type", value="application/json");
// Construct the message body.
local.body = {
"test": "hello"
};
httpService.addParam(type="body", value=SerializeJSON(local.body));
writeDump(GetHttpRequestData());
local.result = httpService.send().getPrefix();
更新
好的,所以我将postURL
更改为另一个本地页面,并在该页面上我使用GetHttpRequestData()
将方法,协议,标题和内容全部记录到文件中。这就是我得到的:
POST
HTTP/1.1
{host={www.mysite.com},user-agent={ColdFusion},connection={close},content-length={16},authorization={Passcode Mjc1ODMwMDAwOjIwMTI5NGUwMjI2MzQxMzlBZjBFMDE2RmViRjg0RDAz},content-type={application/json}}
{"test":"hello"}
因此我觉得我确实正确地将POST发送到正确的URL并且标题也正确设置。我的内容甚至看起来都在那里,所以我开始觉得我向API发送了无效的正文数据。除非有人能想到其他任何事情要检查,否则我将进一步调查。
答案 0 :(得分:0)
而不是
local.body = {
"test": "hello"
};
试
local.body = {};
local.body["test"] = "hello";
然后你可以
SerializeJSON(local.body)