php - curl 到 cfhttp 翻译

标签 php curl coldfusion cfhttp

我正在尝试将 PHP 脚本转换为 ColdFusion,但没有成功。有人可以帮助我吗?

原始 PHP 脚本(用于 unifi wlan manager api):

$unifiServer = "https://xxx.xxx.xxx.xxx:xxxx";
$unifiUser = "xxxxx";
$unifiPass = "xxxxx";

// Start Curl for login
$ch = curl_init();
// We are posting data
curl_setopt($ch, CURLOPT_POST, TRUE);
// Set up cookies
$cookie_file = "/tmp/unifi_cookie";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// Allow Self Signed Certs
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Force SSL1 only
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
// Login to the UniFi controller
curl_setopt($ch, CURLOPT_URL, "$unifiServer/api/login");
$data = json_encode(array("username" => $unifiUser,"password" => $unifiPass));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
// send login command
curl_exec ($ch);

ColdFusion cfhttp 翻译:

<cfhttp url="https://xxx.xxx.xxx.xxx:8443/api/login" method="POST" result="test">
    <cfhttpparam type = "formField" name = "username" value="xxxxxxx">
    <cfhttpparam type = "formField" name = "password" value="xxxxxxxx">
    <cfhttpparam type="header" name="Content-Type" value="application/json">    
</cfhttp>

<cfdump var="#test#">

cfhttp 失败:

"HTTP/1.1 400 Bad Request Server"
msg" : "api.err.Invalid" , "rc"

SSL 证书安装在证书库中。

最佳答案

$unifiUser = "xxxxx";
$unifiPass = "xxxxx";
$data      = json_encode(array("username" => $unifiUser,"password" => $unifiPass));

翻译成

<cfset unifiUser = "xxxxx">
<cfset unifiPass = "xxxxx">
<cfset data      = serializeJSON({ "username" = unifiUser, "password" = unifiPass })>

并且您的 curl 的有效负载转换为

<cfhttp url="https://xxx.xxx.xxx.xxx:8443/api/login" method="POST" result="test">
    <cfhttpparam type="body" value="#data#">
    <cfhttpparam type="header" name="Content-Type" value="application/json">
</cfhttp>

<cfdump var="#test#">

发送 cookie:

<cfset cookie_file    = "/tmp/unifi_cookie">
<cfset cookie_content = fileRead(cookie_file)>

并添加

<cfhttpparam type="header" name="Cookie" value="#cookie_content#">

如果您需要发送多个 cookie,则必须使用分号 ; 将它们连接到 cookie_content 中。

关于php - curl 到 cfhttp 翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40021881/

相关文章:

php - 连接到 SQL Server.PDOException 对象时出错 (Azure)

php - 是否可以将数据从 php 发布到 ssl 脚本?

Win32 上的 PHP 5.5.3 - cURL 需要 400 毫秒以上来解析所有域名,甚至是本地主机

coldfusion - FCKEditor WYSIWYG 控件未显示在 ColdFusion 9 上

java - 在Windows Server 2012上使用命令行执行jar文件

php - WHERE 子句中的 MySQL RAND() 匹配一小组行

php - 如何让 gettext 在 IIS/PHP 上工作

python - PyCurl 类型错误 : invalid argument to setopt

java - Curl 在 JetBrains IDE (Windows) 中无法用于 POST

session - 使用不带 cookie 的 Coldfusion session