【问题标题】:Adding headers to HTTP request using cfhttp's addParam method使用 cfhttp 的 addParam 方法向 HTTP 请求添加标头
【发布时间】: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);

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

  1. 我的回复中出现错误
  2. 我正在执行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


【解决方案1】:

而不是

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

试试

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

那么你可以

SerializeJSON(local.body)

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多