我希望有人可以帮助我。
我使用此网址进行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 :(得分: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)
尝试以下操作后会得到什么:
编辑: 哦,还有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
}
如果我的回答对你有帮助,请告诉我。