Как исправить 411 Длина Требуемая ошибка с файлом_get_contents и API-интерфейсом expedia?

Я делаю бронирование онлайн-отелей с помощью проекта xml api (php). Когда я работаю в коде бронирования, он показывает ошибку следующего

"Warning: file_get_contents(https://...@gmail.com</email><firstName>test</firstName><lastName>smith</lastName><homePhone>8870606867</homePhone><creditCardType>CA</creditCardType><creditCardNumber>5401999999999999</creditCardNumber>....</HotelRoomReservationRequest>) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 411 Length Required"

его мой код

 $context = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded", "Accept: application/xml" ) ) ); $url ='https://book.api.ean.com/....'; $xml = file_get_contents($url, false, $context); 

Это для отправки кредитной информации PLZ любезно дать мне предложение какой тип ошибки ….

Согласно RFC2616 10.4.12 :

 10.4.12 411 Length Required The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message. 

Вам нужно добавить заголовок Content-Length в свой POST запрос. Это размер в байтах (октетах) вашего тела запроса POST. Чтобы получить длину, вы можете использовать strlen в теле POST. Поскольку в вашем примере кода не отображается тело POST, трудно привести конкретный пример. Тело сообщения передается с записью ['http']['content'] в контексте потока.

Вероятно, этого уже достаточно, если вы установили запись content (см. Параметры контекста HTTP ).

Изменить: Следующий пример кода может решить вашу проблему. Он демонстрирует, как отправить XML-код на сервер через запрос POST с использованием file_get_contents и заголовков настроек, включая заголовок Content-Length .

 $url = 'https://api.example.com/action'; $requestXML = '<xml><!-- ... the xml you want to post to the server... --></xml>'; $requestHeaders = array( 'Content-type: application/x-www-form-urlencoded', 'Accept: application/xml', sprintf('Content-Length: %d', strlen($requestXML)); ); $context = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", $requestHeaders), 'content' => $requestXML, ) ) ); $responseXML = file_get_contents($url, false, $context); if (FALSE === $responseXML) { throw new RuntimeException('HTTP request failed.'); } 

Если вам необходимо улучшить управление ошибками, см. ignore_errors контекста HTTP-протокола ignore_errors Docs и документы $http_response_header . Подробная обработка заголовков HTTP-ответов доступна в моем блоге: HEAD сначала с PHP-потоками .