Обратите внимание на код ниже и обратите внимание на прокомментированные параметры скручивания в массиве. Этот код выполняется "как есть" и возвращает допустимый ожидаемый XML-ответ.
protected function curlResponse($params)
{
// Returns valid XML
$xml = $this->TokenXml($params);
$len = strlen($xml);
// Returns array of headers Content-Type, SOAPAction and Content-Length
$headers = $this->TokenHeaders($len);
$curlopts = [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_HEADER => FALSE,
CURLOPT_URL => $params['tokenURL'],
//CURLOPT_POSTFIELDS, $xml,
//CURLOPT_HTTPHEADER, $headers
];
$ch = curl_init();
curl_setopt_array($ch, $curlopts);
// Now swap the commented lines above and comment out these two. Fails.
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
Раскомментируйте две строки в массиве и закомментируйте обе строки curl_setopt (). Код не выполняется.
Под ошибкой я подразумеваю, что в первом случае получатель в $ params ['tokenURL'] возвращает действительный XML-ответ с токеном, а во втором - с ошибками, как описано ниже. В документации говорится, что curl_setopt_array () является вполне допустимой альтернативой повторяющимся curl_setopt ().
Ошибки:
Если в массиве находится просто CURLOPT_HTTPHEADER, получает "Сервер не может обработать запрос, потому что тип носителя не поддерживается. "
Если в массиве опций находится только CURLOPT_POSTFIELDS, то время ожидания запроса истекает / прекращается.
Если опции ОБА находятся вмассив параметров возвращает полную HTML-страницу «справки / использования», которая сообщает, что он не получает или не анализирует XML: «Поддерживаются следующие операции .....»
(Моя «операция» указана на этой странице)
Есть ли очевидное объяснение или что-то глупое, которое я пропускаю?
$ lsb_release -a
Description: Ubuntu 18.04.3 LTS
Release: 18.04
$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
$ docker -v
Docker version 19.03.2, build 6a30dfc