【问题标题】:cURL equivalent of cfhttpparam?cURL 相当于 cfhttpparam?
【发布时间】: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/jsonheadervalue="#variables.jsData#"body 作为cfhttpparam
  • 你的json结构是什么样的?同样在我的一些身份验证调用中,我循环并为每个参数创建一个&lt;cfhttpparam&gt;。此外,您可能想要限定&lt;cfhttpparam&gt; 中的type 参数。我举了一个例子来说明我所说的是否有帮助……(请注意,不要作为官方答案)。
  • 啊!你说对了。看看你需要做的就是在这里发帖,你就明白了。我自己做过一两次:D。然后让你的'答案'并将其标记为已解决:)

标签: php curl coldfusion coldfusion-10


【解决方案1】:

不是官方答案,只是一个结构示例供 OP 参考,因为 PHP 跨越:

fieldType 可以是urlformfield

方法可以是getpost

在密码示例中,我已经进行了身份验证,所以我只是传递了令牌,这样我就可以得到一些东西。

你的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 包装器并在那里等着您。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2019-06-14
      • 2021-04-18
      • 1970-01-01
      • 2013-07-14
      • 2014-02-02
      相关资源
      最近更新 更多