andrey-tech / bitrix24-api-php

Обертка на PHP7+ для работы с REST API Битрикс24 с использованием механизма входящих вебхуков, троттлингом запросов к API и логированием в файл.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ошибка #77 curl после 300 запроса

nikolablin opened this issue · comments

Добрый день.
Для обновления контактов использую метод getContactsByPhone.
Контактов много и запросов приходится делать много. Но после 300 запроса вылетаю в ошибку
HTTP: Ошибка cURL #77 (https://bitrix.autocity-finance.ru/rest/20/**/crm.contact.list.json):

Добрый день!

  1. Ошибка cURL #77 связана с файлом корневых сертификатов cacert.pem: "CURLE_SSL_CACERT_BADFILE (77) Problem with reading the SSL CA cert (path? access rights?)".

  2. Попробуйте обновить библиотеку andrey-tech/http-client-php до версии v3.0.7. Она содержит актуальную на сегодня версию файла корневых серификатов cacert.pem.

Добрый день.
Обновил библиотеку, composer сейчас выглядит как:
image

Ошибка сохранилась та же.

Из вашего скриншота непонятно какая версия библиотеки andrey-tech/http-client-php реально установлена. Проверьте версию библиотеки в composer.lock или убедитесь, что сертификаты в файле cacert.pem этой библиотеки датированы декабрём 2023 года.

Проверил, все так, как указано выше:
Версия cacert.pem - декабрь 2023
image

Версия http-client-php - 3.0.7
image

Аналогичная проблема, версия библиотеки andrey-tech/http-client-php 3.0.7

@nikolablin
Давайте попробуем разобраться что происходит.

  1. Ошибка cURL #77 происходит всегда после 300 запроса?
  2. Ошибка cURL #77 происходит только при вызове метода getContactsByPhone?
  3. Имеется ли какой-то дополнительный текст после двоеточия в сообщении об ошибке? HTTP: Ошибка cURL #77 (https://bitrix.autocity-finance.ru/rest/20/**/crm.contact.list.json):.
  4. Попробуте добавить задержку между запросами, скажем, в 1 секунду и посмотрите возникнет ли ошибка после 300 запроса.
  1. Да, всегда после 300
  2. Да, другие методы отрабатывают. Только с этим проблема
  3. Нет, текста другого нет. Печатал развернуто ошибку, получил путь к выполнению метода в классе.
  4. Задержку в первую очередь пробовал добавить, секунд 20. Но ошибка все равно начиналась там же, на 300 запросе.

Попробуйте временно отключить проверку SSL/TLS-сертификата сервера и посмотреть будет ли возникать ошибка:

$bx24->http->verifySSLCertificate = false;

Отключил. На 300 запросе теперь летит ошибка Ошибка cURL #35 (https://bitrix.autocity-finance.ru/rest/*/***/crm.contact.list.json): Process open FD table is full

Видимо столкнулись с проблемой с cURL, описанной тут: php-http/curl-client#38
Предлагается, в частности, попробовать увеличить величину ulimit. Надеюсь у вас GNU/Linux ;)

Попробую передать в Хэдер connection:close на 300 запросе и увеличить ulimit. Отпишусь.

У меня cURL #77 возникала в методе featchDealList. Увеличение ulimit решило проблему. Спасибо

Увеличил ulimit, не помогло.
Connection close не могу интегрировать без вмешательства в библиотеку.

@thwipthwipx

У меня cURL #77 возникала в методе featchDealList. Увеличение ulimit решило проблему. Спасибо

Расскажите как, где и насколько вы увеличили ulimit. Может быть это кому-то поможет.

@nikolablin

Увеличил ulimit, не помогло.
Connection close не могу интегрировать без вмешательства в библиотеку.

Попробуйте сделать временные изменения в vendor, чтобы проверить результат.

Добавил в $requestHeaders Connection: close на каждый запрос и все отлично прошло сразу.
Быть может можно передавать этот хэдер сразу из $bx24? Чтоб не закрывать каждый раз, а по счетчику?

Поскольку для каждого запроса вызывается curl_init(), а после обработки ответа - curl_close(), то есть соединение не персистентное, то разумно с каждым запросом передавать HTTP-заголовок Connection: close.

Окей, тогда оставлю его там на постоянку. Спасибо за помощь)