2

我正在尝试使用 CFHttp 发布到 Nexmo API。

API 文档

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post">
    <cfhttpparam name="api_key" value="#api.key#" type="url">
    <cfhttpparam name="api_secret" value="#api.secret#" type="url">
    <cfhttpparam name="country" value="US" type="url">
    <cfhttpparam name="msisdn" value="11234567890" type="url">
</cfhttp>

运行时我得到一个状态 420(错误的参数)。

我究竟做错了什么?

这是 PHP 中的一个示例:API

4

2 回答 2

1

尝试更改为表单域

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post">
    <cfhttpparam name="api_key" value="#api.key#" type="FormField">
    <cfhttpparam name="api_secret" value="#api.secret#" type="FormField">
    <cfhttpparam name="country" value="US" type="FormField">
    <cfhttpparam name="msisdn" value="11234567890" type="FormField">
</cfhttp>

该文档正在寻找一个 POST 并且您发送一个组合帖子/获取。根据您发送的内容,您不发送变量。FormField 将解决这个问题。

于 2013-03-21T19:18:41.343 回答
1

查看 API 文档,在我看来,他们期望这些字段是表单值。这是此处文档的摘录:

HTTP 方法

所有请求都通过使用 UTF-8 编码和 URL 编码值的 HTTP POST 或 GET 方法提交。

Expected "Content-Type" for POST is "application/x-www-form-urlencoded", however we also support "application/json", "application/jsonrequest", "application/x-javascript", "text/json", "text/javascript", "text/x-javascript", "text/x-json" when posting parameters as a JSON object.

So try changing your code to the following:

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post" charset="utf-8">
    <cfhttpparam name="Content-Type" value="application/x-www-form-urlencoded" type="header">
    <cfhttpparam name="Accept" value="application/xml" type="header">
    <cfhttpparam name="api_key" value="#api.key#" type="formField">
    <cfhttpparam name="api_secret" value="#api.secret#" type="formField">
    <cfhttpparam name="country" value="US" type="formField">
    <cfhttpparam name="msisdn" value="11234567890" type="formField">
</cfhttp>

Note that I have the Accept header set to application/xml. According to the docs this could also be application/json. Change that value depending on what you want.

于 2013-03-21T19:19:20.487 回答