2016-10-13 6 views
2

Я пытаюсь перевести PHP-скрипт в ColdFusion и не удалось. Может ли кто-нибудь мне помочь?curl to cfhttp translation

Оригинальный скрипт (для УСОСФС WLan менеджер 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 Сервер "
msg": "api.err.Invalid", "rc"

Сертификат SSL установлен в магазине сертификатов.

+1

Try посылая 'username' и' password' в теле запроса вместо 'formfield', как данные будут в кодировке URL и от PHP фрагмент кода это походит вам нужно, чтобы 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 })> 

и полезной нагрузки вашего 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#"> 

Чтобы отправить печенье:

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

и добавить

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

Если вам нужно отправить несколько печенье, вы должны объединить их в cookie_content используя точку с запятой ;.

+0

Отлично, это работает! Большое спасибо за перевод Alex! – Signia

+0

Спасибо Алекс. Я получаю ошибку cf «файл или directoy/tmp/unifi_Cookie не существует» – Signia

+0

Какой может быть резонанс? – Signia

0

Если CFHTTP дает вам головные боли (что часто возникает при работе с SSL/HTTPS), подумайте о том, чтобы вместо CURL вызывать CURL из командной строки, используя CFEXECUTE.

Например:

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