2017-11-18 17 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で同じことをしようとしています。

私は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($データ)。
  • curl_setopt($ ch、CURLOPT_HTTPHEADER、array( '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ルート証明書バンドルがない場合は、カールのWebサイトでダウンロードしてサーバーに保存してください: 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

関連する問題