How to fix 411 Length Required error with get_contents_file and expedia API?

I am making an online hotel reservation using the xml api (php) project. When I work in the reservation code, it shows the error of the following

"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"

its my code

$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);

He for sending credit information plz kindly gives me an offer, what type of error ....

+1
source share
1 answer

According to 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 & shy; Docs).

: . , 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 & shy; Docs $http_response_header & shy; Docs. HTTP- : HEAD PHP.

+6

Source: https://habr.com/ru/post/1666472/


All Articles