Я пытаюсь отправить запрос HTTPS POST с данными 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
Тип содержимого: text / xml; charset = UTF-8
Длина контента: 0 Дата: чт, 02 дек
2010 03:02:33 GMT
Я уверен, что тип файла правильный, формат XML правильный.
Я пробовал urlencode поля, но это не сработало.
Что еще я мог сделать не так?