使用cfhttp的addParam方法将标头添加到HTTP请求

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)

但传出请求似乎不包含这些标头.我可以告诉它不起作用,因为:

  1. 我在回复中遇到错误
  2. 我正在做一个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发送无效的正文数据.除非有人能想到其他任何事情要检查,否则我将进一步调查.

Ale*_*ban 0

代替

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)