curl_easy_perform возвращает -1, когда сервер недоступен

0

Когда я пытаюсь выполнить некоторую операцию HTTP_POST, HTTP_DELETE на недоступном сервере, код возврата иногда приходит как -1. Из-за этого мое приложение терпит крах.

Вот мой пример кода.

Мой код приложения находится в c++, где я также читаю заголовок ответа и ответа.

  lCode = curl_easy_setopt(curlHandle, CURLOPT_HEADERFUNCTION,
                                      HttpClientImplCurl::recvFunctionHeader);

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_HEADERFUNCTION returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }


    lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEHEADER,
                                      &readResHeaderBuffer);

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_WRITEHEADER returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }

        lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION,
                             HttpClientImplCurl::recvFunction);

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt WRITEFUNCTION returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }

    lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA,
                             &readResBuffer);

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt WRITEDATA returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }

    lCode = curl_easy_setopt(curlHandle, CURLOPT_CUSTOMREQUEST, "DELETE"); /* !!! */

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_CUSTOMREQUEST returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }

    lCode =  curl_easy_setopt(curlHandle, CURLOPT_POSTFIELDS, aInRemovedata.getBuffer()); /* data goes here */

    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_POSTFIELDS  returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);
        return http_code;

    }

lCode = curl_easy_perform(curlHandle);


    if (lCode != CURLE_OK) {
        LOG(LOG_CRIT, "CURL failure: curl_easy_perform returned %d\n", lCode);
        curl_slist_free_all(lHeaders);
        errorBuff = curl_easy_strerror(lCode);---->my doubt is when i am geting "-1", this line is caused the crash.
        return http_code;
    }

И мой обратный вызов выглядит следующим образом:

  size_t
HttpClientImplCurl::recvFunctionHeader(void *aInBuf, size_t aInSize,
                                size_t aInNmemb, void* aInUserp)
{
    fprintf(stderr, "curl error: too small buffer in recv2\n");
    ((std::string*)aInUserp)->append((char*)aInBuf, aInSize * aInNmemb);
    return aInSize * aInNmemb;
}


// Private static callback
size_t
HttpClientImplCurl::recvFunction(void *aInBuf, size_t aInSize,
                                size_t aInNmemb, void* aInUserp)
{
    fprintf(stderr, "curl error: too small buffer in recv1\n");
    ((std::string*)aInUserp)->append((char*)aInBuf, aInSize * aInNmemb);
    return aInSize * aInNmemb;
}

Пожалуйста, помогите мне в этом, почему мы время от времени получаем "-1" вместо "28".

Вот сигнатура функции, где errorBuf приходит как параметр

 int
HttpClientImplCurl::put(const HttpClient& aInClient,const base::Buffer& aInPutdata,
                          base::Buffer& aOutRecvBuf,base::Buffer&  aOutRecvHeaderBuf,const char*& errorBuff)
  • 0
    Как определяется errorBuff ?
Теги:
curl
libcurl

1 ответ

0

Вы можете попробовать установить CURLOPT_ERRORBUFFER и CURLOPT_VERBOSE, чтобы получить дополнительную информацию о том, почему значение, возвращаемое curl_easy_perform, - -1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню