2016-10-13 8 views
2

PHPスクリプトをColdFusionに翻訳しようとしていますが、成功しませんでした。誰かが私を助けることができますか?curl to cfhttp translation

(UNIFI WLAN Manager APIのための)オリジナルのPHPスクリプト:

$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の翻訳:

「HTTP/1.1 400不正な要求:

<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はで失敗しますサーバー "
msg": "api.err.Invalid"、 "rc"

証明書が証明書ストアにインストールされています。

+1

データはエンコードされたURLやPHPからだろう、との代わりに 'formfield'の要求の本体に' username'と 'password'を送信してみてくださいそれはのように思えるスニペットあなたはjsonエンコードされている必要があります。 – Beginner

答えて

2
$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 })> 

に変換し、あなたのカールのペイロードがクッキーを送信するには

<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#"> 

に変換します。

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

、あなたが複数のクッキーを送信する必要がある場合は、セミコロン;を使用してcookie_contentでそれらを連結する必要が

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

を追加します。

+0

偉大な、それは動作します!翻訳アレックスをありがとう! – Signia

+0

Alexに感謝します。私はcfエラー "ファイルまたはdirectoy/tmp/unifi_Cookieが存在しない"を取得します – Signia

+0

何が共振することができますか? – Signia

0

CFHTTPが頭痛(あなたがSSL/HTTPSを扱うときにしばしばする)がある場合、代わりにCFEXECUTEを使用してコマンドラインからCURLを呼び出すことを検討してください。例えば

<cfexecute timeout="10" name="curl" variable="myVar" arguments="https://google.com"></cfexecute>