За последние 24 часа нас посетили 22678 программистов и 1021 робот. Сейчас ищут 632 программиста ...

CURL не отправляет большой POST запрос

Тема в разделе "PHP для новичков", создана пользователем AndyKovalev, 19 окт 2017.

Метки:
  1. AndyKovalev

    AndyKovalev Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте.

    Отправляю через CURL запрос к api сайта.

    Передаю данные (фото в base64). При размере данных до 10Мб все ок, если больше то не отправляет запрос. Перепробовал разные настройки в php.ini, ничего не помогает.
    Размер определял выводом в файл строки и через strlen.

    Текущие настройки:
    Original upload_max_filesize: 20M
    Original post_max_size: 50M
    Original memory_limit: 128M
    Original max_file_uploads: 30
    Original max_input_time: 60

    CURL, которым отправляю:

    Код (Text):
    1.  
    2. if( $curl2 = curl_init() ) {
    3.                 curl_setopt($curl2, CURLOPT_URL, $url);
    4.                 curl_setopt($curl2, CURLOPT_POST, true);
    5.                 curl_setopt($curl2, CURLOPT_POSTFIELDS, $data);
    6.                 curl_setopt($curl2, CURLOPT_FOLLOWLOCATION, true);
    7.                 curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);
    8.                 curl_setopt($curl2, CURLOPT_SSL_VERIFYPEER, false);
    9.                 curl_setopt($curl2, CURLOPT_SSL_VERIFYHOST, false);                      
    10.                 $out = curl_exec($curl2);
    11.                 $result_ad = json_decode($out);
    12.                 $err_no = curl_errno($curl2);
    13.                 curl_close($curl2);
    14. }
    var_dump($out); // null
    var_dump($err_no); // string(0) ""

    При размере до 10Мб всё работает корректно. При превышении на сайт запрос вообще не приходит.

    В каком направлении смотреть?
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    проверь client_max_body_size или как-то так у nginx. Директиву у apache аналогичную не помню
     
  3. AndyKovalev

    AndyKovalev Новичок

    С нами с:
    19 окт 2017
    Сообщения:
    2
    Симпатии:
    0
    Спасибо, проверил.
    client_max_body_size 256M - это для nginx
    LimitRequestBody 20000000 - это для апач
    Проблему не решило(
    Переписал механизм передачи по-другому, но вопрос остался открытым.
    В принципе вопрос супер не тривиальный, редко у кого встретится.
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    выведите phpinfo(). у php-fpm мешок конфигов и нередко не в том меняют настройки

    попробуйте отправить запрос куда угодно хоть на свой же хост, возможно проблема не у вас вовсе
     
  5. panchenkoprog

    panchenkoprog Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    1
    Симпатии:
    1
    Возможно кому-то поможет!
    нужно копать в эту сторону - https://www.php.net/manual/ru/function.curl-setopt.php#96056
    у меня тоже была такая проблема, всё решил, вот мой код

    Код (Text):
    1. ch = curl_init();
    2. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    3. curl_setopt($ch, CURLOPT_ENCODING, "");
    4. curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    5. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    6. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    7. curl_setopt($ch, CURLOPT_HEADER, 0);
    8. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    9. $params = (is_array($params)) ? http_build_query($params) : $params;
    10. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($params)));
    11. curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    12. curl_setopt($ch, CURLOPT_URL, $url);
    13.  
    14. $response = curl_exec($ch);
     
    askanim нравится это.