Bra*_*all 5 coldfusion cfhttp coldfusion-10 cfml
我是Coldfusion的新手,无法理解为什么我在使用cfhttp进行的http请求中添加几个标题时遇到了很多麻烦.我正在尝试使用cfscript编写请求,并且从我读过的所有内容中我应该能够简单地执行:
httpService.addParam(type="header", name="Content-Type", value="application/json");
Run Code Online (Sandbox Code Playgroud)
要么
httpService.addParam(type="header", name="Authorization", value=local.authPasscode);
Run Code Online (Sandbox Code Playgroud)
但传出请求似乎不包含这些标头.我可以告诉它不起作用,因为:
writeDump(GetHttpRequestData()),它显示了请求的所有细节(此输出根本不显示Authorization标头,并将Content-Type标头显示为:多部分/格式的数据; 边界= ---- WebKitFormBoundaryZs9TyOQV02N3fQop
我似乎也很难以类似的方式添加消息正文,所以我认为我做错了addParam().我是这样尝试的:
httpService.addParam(type="body", value="hello");
Run Code Online (Sandbox Code Playgroud)
同样,我得到的响应有一堆缺失的字段错误,输出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();
Run Code Online (Sandbox Code Playgroud)
更新:
好的,所以我把我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"}
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,我确实正确地将POST发送到正确的URL并且标题也正确设置.我的内容甚至看起来都在那里,所以这开始感觉我正在向API发送无效的正文数据.除非有人能想到其他任何事情要检查,否则我将进一步调查.
代替
local.body = {
"test": "hello"
};
Run Code Online (Sandbox Code Playgroud)
尝试
local.body = {};
local.body["test"] = "hello";
Run Code Online (Sandbox Code Playgroud)
然后你可以
SerializeJSON(local.body)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |