Как можно установить время ожидания ответа при использовании функции CURLOPT_WRITEFUNCTION в cURL?

Как установить ограничение времени для получения ответа от ip-камеры, чтобы скрипт продолжал выполняться даже если ответ не получен в течение 20 секунд, но продолжал работу, если ответы в writer были?
  • 14 марта 2024 г. 0:09
Ответы на вопрос 2
Для установления времени ожидания ответа при использовании функции CURLOPT_WRITEFUNCTION в cURL можно воспользоваться опцией CURLOPT_TIMEOUT. Например, чтобы установить ожидание ответа в течение 20 секунд, необходимо добавить следующий код:

```c
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
```

Этот код установит время ожидания ответа в 20 секунд. 

Чтобы установить ограничение времени для получения ответа от ip-камеры, можно использовать функцию curl_easy_setopt с опцией CURLOPT_TIMEOUT. Однако, если ответ не получен в течение установленного времени, скрипт будет прерван. 

Для обработки ситуации, когда ответ не получен в течение 20 секунд, но скрипт должен продолжать работу, если ответы в writer были, можно использовать механизм многопоточности или асинхронного выполнения. Например, можно создать дополнительный поток, который будет отслеживать время ожидания ответа и продолжать работу главного потока, если ответ получен в заданное время. 

Альтернативным подходом может быть использование библиотеки libcurl вместо cURL, которая позволяет более гибко настраивать время ожидания ответа и выполнять другие дополнительные действия в случае задержки.
У вас callback в виде функции writer скорее всего не срабатывает, в случае ошибки по curl. 
Попробуйте проанализировать curl после посылки запроса:
$result = curl_exec($ch);
$info = curl_getinfo($ch);
if($info['http_code'] != 200)
{
  // по http не получили статус 200, значит, пишем репорт об этом
}
curl_close($ch);

Вариант 2:
$result = curl_exec($ch);
$curl_error_number = curl_errno($ch);
if($curl_error_number)
{
   $info = curl_getinfo($ch);
  // что-то случилось с соединением в целом, пишем репорт об этом со сведениями $info
}
curl_close($ch);
Похожие вопросы