2016-10-13 3 views
2

PHP 스크립트를 ColdFusion으로 번역하려고하는데 성공하지 못했습니다. 누군가 나를 도울 수 있을까요?curl to cfhttp translation

원래 PHP 스크립트 (유니 파이 무선 랜 관리자 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 번역 :

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

SSL 인증서가 인증서 저장소에 설치됩니다.

+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)> 

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

여러 쿠키를 전송해야 할 경우3210

을 추가, 당신은 세미콜론 ;를 사용 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>