【发布时间】:2014-06-24 14:50:05
【问题描述】:
我使用 Coldfusion 和 cfhttp 对 API 进行了有效调用,如下所示:
<cfhttp url="http://api.domain.com/api/proxy.cfc" method="post" result="httpResult" charset="UTF-8">
<cfhttpparam type="url" name="method" value="apiauth"/>
<cfhttpparam type="url" name="argumentCollection" value="#jsData#"/>
</cfhttp>
#jsData# 是一个表示数据数组的 json 字符串。
我对我们有什么问题
<cfhttpparam type="url" name="method" value="apiauth"/>
使用 cURL。如果我将其附加到 URL:
http://api.domain.com/api/proxy.cfc?method=apiauth
我得到的响应是:302 临时移动
在 PHP 中,我将数组创建为 $remoteArray(并且该数据工作正常,因此问题不存在)并且我已经尝试将其作为我的 CURL:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'http://api.domain.com/api/proxy.cfc',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
'method' => 'apiauth',
'argumentCollection' => json_encode($remoteArray)
)
));
$resp = curl_exec($curl);
但它不起作用(可能是因为 method=>apiauth 不是一个帖子字段 - 它是一个 URL 参数 - 但如果我真的把它放在 URL 中,我会得到一个 302。
已解决 - $remoteArray 确实 中有错误。最初 $apiauthkey、$apicomponent 和 $apimethod 是在数组之外定义的。一旦将它们添加到数组中进行 json 编码,它就可以工作了。这是 $remoteArray 所建的房子:
$remoteArray = array(
"apiauthkey" => "$apiauthkey",
"apicomponent" => "$apicomponent",
"apimethod" => "$apimethod",
"apiarguments" => array(
'address_1'=>"test 1",
'address_2'=>"test 2",
'city'=>"new york",
'email'=>"user@domain.com",
'first_name'=>"test fname",
'last_name'=>"test lname",
'ph_num'=>"2155551212",
'state'=>"NY",
'zip'=>"90210",
'rbpid' => $rbpid,
)
);
一旦正确设置了嵌套数组,它就可以在 cURL 中正常工作。感谢回复的人!
【问题讨论】:
-
它可能需要是
application/json的header和value="#variables.jsData#"的body作为cfhttpparam -
你的json结构是什么样的?同样在我的一些身份验证调用中,我循环并为每个参数创建一个
<cfhttpparam>。此外,您可能想要限定<cfhttpparam>中的type参数。我举了一个例子来说明我所说的是否有帮助……(请注意,不要作为官方答案)。 -
啊!你说对了。看看你需要做的就是在这里发帖,你就明白了。我自己做过一两次:D。然后让你的'答案'并将其标记为已解决:)
标签: php curl coldfusion coldfusion-10