PHP Curl http-код 100 и сбой

Я пытаюсь использовать веб-службу с php curl, но получаю http-код «100» и ошибку «Recv failure: Connection was reset». Я протестировал веб-службу с расширением Google Chrome «Postman -REST Client». "и работает отлично. Я искал этот http-код, и похоже, что сервер ожидает данные запроса тела, но я не знаю, что он ожидает от меня, поскольку я не публикую никаких данных, только заголовки.

Мой код выглядит так:

error_reporting(-1);

    $header = array('Content-Length: 1831', 'Content-Type: application/json', 'Authorization: '. $authorization, 'Authorization-Admin: '. $authorization_admin);
    $url = 'http://api.bookingreports.com/public/1/analytics/reports/departures';


    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);


    $result = curl_exec($ch); 
    $errorCode = curl_getinfo($ch, CURLINFO_HEADER_OUT);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    echo $result;
    echo curl_error($ch);
    echo $errorCode;
    echo $httpcode;

    //log_message('debug', 'HTTP HEADER '. $errorCode); 
    curl_close($ch);

и заголовок, который я отправляю, выглядит так:

POST /public/1/analytics/reports/departures HTTP/1.1
Host: api.bookingreports.com
Accept: */*
Content-Length: 1831
Content-Type: application/json
Authorization: myauthcode
Authorization-Admin: myauthadmin
Expect: 100-continue

person Mauricio    schedule 19.08.2013    source источник
comment
Я заметил, что cURL добавил для вас дополнительный заголовок Expect, поэтому я думаю, что этот вопрос может вам помочь: stackoverflow.com/questions/14158675/   -  person Inglis Baderson    schedule 20.08.2013
comment
@AgreeOrNot Я уже пробовал эти два решения .. FAILONERROR не имеет никакого значения, и если я удалю Expect из заголовка, http-код ответа будет равен 0, что, как я знаю, означает, что хост не найден .. Я не знаю не понимаю этого, потому что, как я уже сказал, я уже протестировал этот веб-сервис с расширением REST CLIENT для Google Chrome, и он отлично работает.   -  person Mauricio    schedule 20.08.2013
comment
Может быть проблема в Content-Length: 1831? Должно быть 0, если вы не публикуете никаких данных.   -  person Inglis Baderson    schedule 20.08.2013
comment
@AgreeOrNot также я только что заметил, что когда я удаляю Expect из заголовка, curl изменяется в выводе заголовка POST для HEAD, так что это выглядит так: HEAD /public/1/analytics/reports/departures HTTP/1.1.. это должно быть проблема, потому что для API требуется метод POST. Любая идея, почему curl делает это или как это исправить?   -  person Mauricio    schedule 20.08.2013
comment
@AgreeOrNot Проблема решена! Я изменил длину содержимого на 0, как вы сказали, и решил проблему HEAD благодаря этому вопросу stackoverflow.com/questions/9474971/ .. Я добавил эту строку curl_setopt($ch, CURLOPT_NOBODY, true); Пробую вещи .. Большое спасибо1   -  person Mauricio    schedule 20.08.2013
comment
Хорошо, я рад, что помог.   -  person Inglis Baderson    schedule 20.08.2013
comment
@AgreeOrNot Вы можете написать свое решение Content-Length в качестве ответа, чтобы мы могли проголосовать за него как за правильное решение, и чтобы Маурисио мог принять его как правильное решение.   -  person Kristian    schedule 20.08.2013
comment
@ Кристиан Готово, спасибо.   -  person Inglis Baderson    schedule 21.08.2013


Ответы (1)


Вы отправляете неверное значение Content-Length. Вот почему сервер ожидает тело запроса. Поскольку вы не отправляете никаких данных, Content-Length следует установить на 0.

$header = array('Content-Length: 0', 'Content-Type: application/json', 'Authorization: '. $authorization, 'Authorization-Admin: '. $authorization_admin);

Если вы решите составить заголовок запроса вручную, убедитесь, что для Content-Length задано правильное значение.

person Inglis Baderson    schedule 21.08.2013