2017-11-18 73 views
1

我希望有人能幫助我。使用PHP和cURL調用API URL

我有一個使用這個URL的API調用。

https://192.168.11.234:4444/webconsole/APIController?reqxml=<Request><Login<Username>XXXXX</Username><Password>XXXXX></Password></Login><Get><User><Username>manager</Username></User></Get></Request> 

這工作正常,並按預期返回XML。

但是我試圖用PHP和cURL做同樣的事情。

我有捲曲

到目前爲止,我已經試過這種變化非常小經驗,但我沒有得到任何迴應。只有一個空白頁面。想知道是否有人可以幫助我。

<?php 
$input_xml = '<Request><Login><Username>XXXX</Username><Password>XXXX</Password></Login><Get><User></User></Get></Request>'; 
$url = "https://192.168.11.234:4444/webconsole/APIController"; 


     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 

     curl_setopt($ch, CURLOPT_POSTFIELDS, 
        "reqxml=" . $input_xml); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
     $data = curl_exec($ch); 
     curl_close($ch); 


     $array_data = json_decode(json_encode(simplexml_load_string($data)), true); 

     print_r('<pre>'); 
     print_r($array_data); 
     print_r('</pre>'); 
?> 

我承認我沒有使用cURL很多,所以我可能會離開。

回答

0

你明白了什麼,當你嘗試以下方法:

  • 的var_dump($的數據); ('Content-Type:application/xml'));}};

編輯: 哦,CURLOPT_POST =真

0

取出POSTFIEILDS線以及與此

curl_setopt($ch, CURLOPT_URL, $url."?reqxml=" . urlencode($input_xml)); 

這應該工作更換URL線。

0

1)如果您的服務器不接受POST請求,然後刪除此行:

curl_setopt($ch, CURLOPT_POSTFIELDS, "reqxml=" . $input_xml); 

,並添加:

curl_setopt($ch, CURLOPT_URL, $url.'?reqxml='.urlencode($input_xml)); 

在GET請求發送數據。

2)設定正確的HTTP標頭:

$headers = [ 
    "Content-type: text/xml;charset=\"utf-8\"", 
    "Accept: text/xml", 
    "Content-length: ".strlen($xml_data) 
]; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

3)要看到可能出現的錯誤,行$data = curl_exec($ch);前添加這些行:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
if (curl_error($ch)) { 
    echo 'error:' . curl_error($ch); 
} 

4)你也需要添加支票simplexml_load_string ,因爲失敗時返回false

if (simplexml_load_string($data) === false) { 
// do something 
} 

請讓我知道,如果我的回答幫助你。

0

我愛你們(或加侖) 這工作:

<?php 
$input_xml = '<Request><Login><Username>XXXXX</Username><Password>XXXXXX</Password></Login><Get><User></User></Get></Request>'; 
$url = "https://192.168.11.234:4444/webconsole/APIController"; 
$ch = curl_init(); 
$headers = [ 
    "Content-type: text/xml;charset=\"utf-8\"", 
    "Accept: text/xml", 
    "Content-length: ".strlen($xml_data) 
]; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

     curl_setopt($ch, CURLOPT_URL, $url."?reqxml=" . urlencode($input_xml)); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      if (curl_error($ch)) { 
      echo 'error:' . curl_error($ch); 
      } 
     $data = curl_exec($ch); 
     var_dump($data); 
     curl_close($ch); 


     $array_data = json_decode(json_encode(simplexml_load_string($data)), true); 

     print_r('<pre>'); 
     print_r($array_data); 
     print_r('</pre>'); 
?> 

以爲我是接近,設定正確的標題,並改變:

curl_setopt($ch, CURLOPT_URL, $url); 

要:

curl_setopt($ch, CURLOPT_URL, $url."?reqxml=" . urlencode($input_xml)); 

是什麼幫助。非常感謝您的幫助!

+0

關閉CURLOPT_SSL_VERIFYPEER允許中間人(MITM)攻擊。 如果您的PHP安裝沒有最新的CA根證書包,請在curl網站下載並保存到您的服務器上: http://curl.haxx.se/docs/caextract .html 然後在你的php.ini文件中設置一個路徑,例如在Windows上: 'curl.cainfo = c:\ php \ cacert.pem' [(source)](http://php.net/manual/en/function.curl-setopt.php#110457) – camelsWriteInCamelCase

+0

誰的答案最有幫助,@ user3294740?請閱讀這篇文章[「我應該怎麼做,當有人回答我的問題?」](https://stackoverflow.com/help/someone-answers) – camelsWriteInCamelCase