gpt4 book ai didi

php cURL 返回全部小写

转载 作者:行者123 更新时间:2023-12-04 14:24:36 24 4
gpt4 key购买 nike

我正在连接到 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 中返回的所有键都是小写的,它弄乱了我的其余代码。直到一个月前,这一直工作得很好,我不知道发生了什么变化,但唯一可能的变化是服务器上的某些东西。

任何人都可以指出正确的方向,说明为什么将响应更改为小写吗?谢谢!

最佳答案

PHP 版本使用 HTTP 2 而不是 1.1,并且 HTTP 2 规范要求 header 小写。所以这似乎是造成差异的原因。

https://httpwg.org/specs/rfc7540.html#HttpHeaders - “就像在 HTTP/1.x 中一样, header 字段名称是以不区分大小写的方式进行比较的 ASCII 字符串。但是, header 字段名称必须在 HTTP/2 编码之前转换为小写。一个请求或包含大写头字段名称的响应必须被视为格式错误(第 8.1.2.6 节)。”

您可以将 http 版本强制为 1.1:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

确保您收到大小写混合的 header 。

关于php cURL 返回全部小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48601324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com