【发布时间】:2018-07-14 01:19:20
【问题描述】:
我正在连接一个 API,需要检索 XML 数据。我得到了响应,但问题是所有键都是小写的。如果我使用 SoapUI 测试请求,它会按预期响应,因此我将其范围缩小到我的服务器和我的代码。这是我的要求:
$headers = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: http://XYZDOMAIN.com.au/" . $func,
"Content-length: " . strlen($xml_post_string),
"Accept-Encoding: gzip,deflate"
); //SOAPAction: your op URL
// PHP cURL for https connection with auth
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate");
$response = curl_exec($ch);
if ($errno = curl_errno($ch)) {
$error_message = curl_strerror($errno);
echo "cURL error ({$errno}):\n {$error_message}";
}
$return = gzdecode($response);
print_r($return);
当然,最后的print_r 只是为了让我看看它返回什么。问题是 XML 中返回的所有键都是小写的,它弄乱了我的其余代码。
这在一个月前之前还可以正常工作,我不知道发生了什么变化,但唯一可能的变化是服务器上的一些东西。
谁能指出我为什么将响应更改为小写的正确方向?谢谢!
【问题讨论】:
-
我想这可能与 gzip 压缩有关(压缩所有小写字符时结果通常会略小)
-
您最近升级到 PHP 7.1+ 了吗?并且不要忘记关闭 curl 连接(与问题无关,但值得注意)。
-
@Daniel 我和你在一起,但这似乎只发生在我们身上,所以它是我们的服务器。另外,代码到现在都有效,所以发生了什么变化?我开始认为这是卷曲标题的问题,但无法确定它
-
你确定
$xml_post_string在你的代码中是相同的,当你手动检查SoapUI时? -
@Zeke 我不确定是否有任何服务器端更改,它是带有 cPanel 的托管 VPS。我们使用的是 php 5.4.37。 curl 在所有处理之后在代码中稍后关闭,这只是一个更大的类的一小部分。