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

时间:2015-04-14 13:19:02

标签: coldfusion coldfusion-10 cfml cfhttp

我是Coldfusion的新手,无法理解为什么我在使用cfhttp进行的http请求中添加几个标题时遇到了很多麻烦。我尝试使用cfscript编写请求,而且从我读过的所有内容中我都应该能够做到:

httpService.addParam(type="header", name="Content-Type", value="application/json");

httpService.addParam(type="header", name="Authorization", value=local.authPasscode);

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

  1. 我在回复中收到错误
  2. 我正在执行writeDump(GetHttpRequestData()),其中显示了请求的所有详细信息(此输出根本不显示授权标头,并将Content-Type标头显示为:
  3.   

    的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发送了无效的正文数据。除非有人能想到其他任何事情要检查,否则我将进一步调查。

1 个答案:

答案 0 :(得分:0)

而不是

local.body = {
    "test": "hello"
};

local.body = {};
local.body["test"] = "hello";

然后你可以

SerializeJSON(local.body)