使用PHP和cURL调用API URL

时间:2017-11-18 02:31:03

标签: php xml api curl

我希望有人可以帮助我。

我使用此网址进行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,所以我可能会离开。

4 个答案:

答案 0 :(得分:1)

我爱你们(或女士们) 这有效:

<?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));

有什么帮助。非常感谢你的帮助!

答案 1 :(得分:0)

尝试以下操作后会得到什么:

  • 的var_dump($数据);
  • curl_setopt($ ch,CURLOPT_HTTPHEADER,array('Content-Type:application / xml'));

编辑: 哦,还有CURLOPT_POST = true

答案 2 :(得分:0)

删除POSTFIEILDS行并用此

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

这应该有效。

答案 3 :(得分: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
}

如果我的回答对你有帮助,请告诉我。