PHP https отправляет XML-данные с помощью cURL

Я пытаюсь отправить запрос POST HTTPS с данными XML на сервер с использованием PHP.

Все, что отправляется на сервер, требует проверки подлинности, поэтому я буду использовать cURL.

Некоторая справочная информация. Данные XML должны запрашивать у сервера загрузку файла с определенного URL-адреса в локальное хранилище.

Одно правило использования этого API – Я ДОЛЖЕН установить тип содержимого для каждого запроса в application / xml .

Это то, что я сделал, но не работает …

<?php $fields = array( 'data'=>'<n1:asset xmlns:n1="http://.....com/"><title>AAAA</title><fileName>http://192.168.11.30:8080/xxx.html</fileName><description>AAAA_desc</description><fileType>HTML</fileType></n1:asset>' ); $fields_string = ""; foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string,'&'); $url = "https://192.168.11.41:8443/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, "admin:12345678"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml', 'Content-length: '. strlen($fields_string)) ); $result = curl_exec( $ch ); curl_close($ch); echo $result; ?> 

Я ожидаю, что XML-ответ удаленной загрузки или загрузки не будет выполнен. Но вместо этого я получаю это сообщение об ошибке.

HTTP / 1.1 415 Неподдерживаемый тип носителя: Apache-Coyote / 1.1 Content-Type: text / xml; charset = UTF-8 Content-Length: 0 Дата: Чт, 02 дек. 2010 03:02:33 GMT

Я уверен, что тип файла верен, формат XML верен. Я пробовал urlencode поля, но это не сработало. Что еще я мог сделать неправильно?

Я решаю с

 $xml = $this->getXml(); $url = $this->getUrl(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-type: application/xml', 'Content-length: ' . strlen($xml) )); $output = curl_exec($ch); curl_close($ch); 

Возможно, вы могли бы попробовать text / xml вместо application / xml?

Вы должны сделать в своем исходном коде:

 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields['data']); 

или

 curl_setopt($ch, CURLOPT_POSTFIELDS, '<n1:asset xmlns:n1="http://.....com/"><title>AAAA</title><fileName>http://192.168.11.30:8080/xxx.html</fileName><description>AAAA_desc</description><fileType>HTML</fileType></n1:asset>'); 

Я имею в виду, что вы должны отправить XML напрямую.