Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
nikolablin opened this issue Jan 15, 2024 · 18 comments
Closed

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

nikolablin opened this issue Jan 15, 2024 · 18 comments

Comments

@nikolablin
Copy link

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

@andrey-tech
Copy link
Owner

Добрый день!

  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.

@nikolablin
Copy link
Author

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

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

@andrey-tech
Copy link
Owner

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

@nikolablin
Copy link
Author

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

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

@thwipthwipx
Copy link

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

@andrey-tech
Copy link
Owner

@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 запроса.

@nikolablin
Copy link
Author

  1. Да, всегда после 300
  2. Да, другие методы отрабатывают. Только с этим проблема
  3. Нет, текста другого нет. Печатал развернуто ошибку, получил путь к выполнению метода в классе.
  4. Задержку в первую очередь пробовал добавить, секунд 20. Но ошибка все равно начиналась там же, на 300 запросе.

@andrey-tech
Copy link
Owner

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

$bx24->http->verifySSLCertificate = false;

@nikolablin
Copy link
Author

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

@andrey-tech
Copy link
Owner

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

@nikolablin
Copy link
Author

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

@thwipthwipx
Copy link

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

@nikolablin
Copy link
Author

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

@andrey-tech
Copy link
Owner

andrey-tech commented Jan 18, 2024

@thwipthwipx

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

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

@andrey-tech
Copy link
Owner

@nikolablin

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

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

@nikolablin
Copy link
Author

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

@andrey-tech
Copy link
Owner

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

@nikolablin
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants