@b4rret

Почему возникает ошибка OpenSSL при использовании curl?

Отправляю уведомления с использованием multi curl'a и сервиса firebase cloud messaging. Все сообщения с разными данными, поэтому одним сообщением, указав только токены отправить не получается. (Возможно не самое лучшее решение) При отправке около 400 сообщений всё ок, если больше (напр. 800) то возникает ошибка OpenSSL. Система Ubuntu 18.04, обновил openssl до 1.1.1b, не помогло. При этом проверял на другом сервере с теми же версиями ОС, openssl, curl'а, php, там всё работало.

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to fcm.googleapis.com:443

$connectionArray = [];
$cmh = curl_multi_init();

$headers = [
    'Authorization:key = fcm.serverKey',
    'Content-Type: application/json'
];

foreach($notifyArr as $notify) {
    $fields = [
        'registration_ids' => explode(',', $notify->user_token),
        'priority' => 'high',
        'content_available' => true,
        'notification' => [
            'title' => $notify->title,
            'body' => $notify->text,
            'sound' => 'default'
        ]
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'fcm.url');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $connectionArray[] = $ch;
    curl_multi_add_handle($cmh, $ch);
}

$running = null;
do {
    curl_multi_exec($cmh, $running);
} while($running > 0);

foreach($connectionArray as $ch) {
    $info = curl_getinfo($ch);
    if( $info['total_time'] <= 0 || !is_numeric($info['total_time']) ) {
        $errors = true;
        continue;
    }
    curl_multi_remove_handle($cmh, $ch);
}
curl_multi_close($cmh);
  • Вопрос задан
  • 2246 просмотров
Решения вопроса 1
@b4rret Автор вопроса
В общем кому интересно, разбил $notifyArr на массивы по 100 элементов, ошибка исчезла
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы