LINUX.ORG.RU

Curl иногда обрывается по установленному таймауту(как отладить?)

 ,


0

1

У меня есть сервер с которого я дергаю api через curl, в большинстве случаев исполняется за примерно 0,5-1 сек, но иногда обрывается по таймауту(я выставил 10 сек) потому что без таймаута он вис прям надолго. как можно понять, отладить где проблема. пример url - http://172.16.11.41/Storage/Devices/

код такой:

    if (NULL == (curl = curl_easy_init()))
        goto exit;

    res = curl_easy_setopt(curl, CURLOPT_USERNAME, "admin");

    res = curl_easy_setopt(curl, CURLOPT_PASSWORD, "admin");

    res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_response_cb);

    res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &response);

    res = curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);

    res = curl_easy_setopt(curl, CURLOPT_PORT, 80);

    res = curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

    res = curl_easy_setopt(curl, CURLOPT_STDERR, fp);

    res = curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);

    res = curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);

    res = curl_easy_setopt(curl, CURLOPT_URL, url);

я так же пытался вытащить(с помощью функции curl_easy_getinfo) после обрыва таймаута, время которое тратится на какие то операции курла

CURLINFO_TOTAL_TIME: 10.001
CURLINFO_NAMELOOKUP_TIME: 0.000
CURLINFO_CONNECT_TIME: 0.001
CURLINFO_PRETRANSFER_TIME: 0.001
CURLINFO_STARTTRANSFER_TIME: 0.000
CURLINFO_REDIRECT_TIME: 0.000

и вывод флага CURLOPT_VERBOSE

*   Trying 172.16.11.41:80...
* TCP_NODELAY set
* Connected to 172.16.11.41 (172.16.11.41) port 80 (#0)
* Server auth using Basic with user 'admin'
> GET /Storage/Devices/ HTTP/1.1
Host: 172.16.11.41
Authorization: Basic YWRtaW46YWRtaW4=
Accept: */*

* Operation timed out after 10001 milliseconds with 0 bytes received
* Closing connection 0

попробуй wireshark, есть шанс, что серевер просто некоректно закрывает соединение, RFC требует вызова shutdown(RW), некоторые реализации сервера от «Васяна» который уж точно умеет в http, этого не делают

sparks ★★★
()