cURL相当于cfhttpparam?

时间:2014-06-24 14:50:05

标签: php curl coldfusion coldfusion-10

我正在使用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 =&gt; 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。感谢那些回复的人!

2 个答案:

答案 0 :(得分:1)

由于PHP交叉而不是官方回答只是OP引用的结构示例:

fieldType可以是urlformfield

方法可以是getpost

在密码示例中,我已经过authed所以我只是传递令牌,所以我可以得到一些东西。

你的argscollection是一个结构...所以你可以循环它。

requestOject是cfhhtp中常见预期事物的正常结构,调用名称和匹配的argsCollection值(然后是参数类型)

<cfhttp url="#url#" 
    method="#method#" 
    result="response" 
    username="#AccountID#" 
    password="#AuthToken#">

    <cfloop collection="#argscollection#" item="v">
        <cfhttpparam name="#parameterTarget(v, requestObject)#" 
                     value="#argscollection[v]#" 
                     type="#fieldType#"  />
    </cfloop>

    </cfhttp>

<cfdump var="#response#">    

我相信这会让你的思维摆脱一些“可能性”。或鼓励另一位CFHTTP专家参与......

此外,如果这是一个常用的库,你可以考虑RIAForgeCFLib或GitHub,因为很可能已经构建了一个Coldfusion包装器并在那里等你。 / p>

答案 1 :(得分:0)

$ remoteArray确实有错误。最初$ apiauthkey,$ apicomponent和$ apimethod是在数组之外定义的。一旦将它们添加到数组中进行json编码就可以了。