首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >curl到cfhttp翻译

curl到cfhttp翻译
EN

Stack Overflow用户
提问于 2016-10-13 13:05:51
回答 2查看 531关注 0票数 3

我正试图将一个PHP脚本转换成ColdFusion,但没有成功。有人能帮我吗?

原始PHP脚本(用于unifi管理器api):

代码语言:javascript
复制
$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翻译:

代码语言:javascript
复制
<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坏请求服务器“ msg:"api.err.Invalid“,"rc”

SSL证书安装在证书存储区中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-13 19:37:43

代码语言:javascript
复制
$unifiUser = "xxxxx";
$unifiPass = "xxxxx";
$data      = json_encode(array("username" => $unifiUser,"password" => $unifiPass));

翻译成

代码语言:javascript
复制
<cfset unifiUser = "xxxxx">
<cfset unifiPass = "xxxxx">
<cfset data      = serializeJSON({ "username" = unifiUser, "password" = unifiPass })>

你卷发的有效载荷转化为

代码语言:javascript
复制
<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#">

发送饼干:

代码语言:javascript
复制
<cfset cookie_file    = "/tmp/unifi_cookie">
<cfset cookie_content = fileRead(cookie_file)>

再加上

代码语言:javascript
复制
<cfhttpparam type="header" name="Cookie" value="#cookie_content#">

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

票数 3
EN

Stack Overflow用户

发布于 2016-10-13 21:56:51

如果CFHTTP让您头疼(它在处理SSL/HTTPS时经常这样做),那么可以考虑使用CFEXECUTE从命令行调用CURL。

例如:

代码语言:javascript
复制
<cfexecute timeout="10" name="curl" variable="myVar" arguments="https://google.com"></cfexecute>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40021881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档