ваш xml поврежден, СТРОГО говоря.
DOMDocument :: loadXML - очень строгий анализатор XML, и он говорит следующее: Warning: DOMDocument::loadXML(): XML declaration allowed only at the start of the document in Entity, line: 2 in /in/EOrYe on line 43
, потому что:![the newline corrupts your XML](https://i.stack.imgur.com/EuG0O.png)
ваша декларация <?xml
- это не первая вещь в вашем XML.самая первая вещь в вашем XML - это новая строка, ТОГДА приходит ваш <?xml
.Вы можете либо удалить символ новой строки, либо заменить
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
на
curl_setopt($ch, CURLOPT_POSTFIELDS, trim($xml_data));
, а также избавиться от
"Content-length: ".strlen($xml_data)
, поскольку libcurl автоматически добавит его длявы, если вы этого не сделаете, и libcurl не сделает никаких ошибок по этому поводу (в отличие от вас, если вы сделаете curl_setopt($ch, CURLOPT_POSTFIELDS, trim($xml_data));
, то длина изменится из-за обрезки, так что в значительной степени всегда пусть curl делаетэто для вас.)
также избавьтесь от "POST /ws_autos.asmx HTTP/1.1"
, потому что 1: curl добавит этот заголовок для вас.и 2: вы не знаете здесь, будет ли curl использовать HTTP / 1.0 или HTTP / 1.1 или HTTP / 2, если curl решит использовать здесь HTTP / 2, вы испортите запрос .. (и curl DOES support)HTTP / 2 сейчас, даже если для этого требуются библиотеки nginx, iirc и сборки curl на многих серверах еще не поддерживают его, но вы бы не хотели, чтобы ваш скрипт волшебным образом перестал работать, как только ваша сборка curl поддерживает HTTP / 2, не так ли?нет, вы бы этого не сделали.)
также избавьтесь от "Host: demo.caledoniaseguros.com.ar",
, потому что curl добавит его для вас, если URL-адрес правильный.ЕДИНСТВЕННЫЙ раз, когда вам нужно (и нужно) установить Host:
-header вручную, это когда у вас проблемы с DNS, вы не можете доверять DNS или время поиска DNS настолько медленное, что вы не можете оценить производительностьудар, все эти сценарии чрезвычайно редки, и чаще всего это просто ошибка новичка.