【发布时间】:2015-06-20 03:03:31
【问题描述】:
我是 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()),它显示了请求的所有详细信息(并且此输出根本不显示 Authorization 标头,并将 Content-Type 标头显示为:
多部分/表单数据;边界=----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 发送无效的正文数据。除非有人能想到任何其他的检查,否则我会进一步调查。
【问题讨论】:
-
什么版本的coldfusion?
-
感谢您的提问...我以为我在 11 上,但看起来我在 10 上。server.coldfusion.productverion 特别读取 10,0,15,292620。
-
添加这样的标题对我来说很好,但我在使用 GetHttpRequestData() 时看不到任何内容,因为这只是向我显示我正在向发送的页面发出的 GET 请求POST 请求。您可以从您的 postURL 调试以转储 POST 请求的内容吗?
-
从 API 返回的 HTTP 响应状态码是什么?
标签: coldfusion coldfusion-10 cfml cfhttp