Помогите с Curl ERRORBUFFER - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть программа, которая использует curl. и часть этого выглядит следующим образом ..

char* Error = NULL;
Error = (char*)malloc(1024);
memset(Error, 0, 1024); 
..............
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, Error);
    curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
    if(CURLE_OK != curl_easy_perform( curl)){
        Error[1023] = '\0';
//      cout << "cURL returned: " <<  Error << endl;
    }
    curl_easy_cleanup(curl);
    free(Error);

Как вы можете видеть, я использовал char * для буфера ошибок ... как использовать строку вместо char *, поскольку у меня уже есть std :: list , который содержит другие строки ошибок ...

и даже если ошибки нет, кут выводит это на экран:

cURL returned: Failed writing body (442456 != 998)

Каким должно быть условие if, чтобы избежать этого?

1 Ответ

2 голосов
/ 07 декабря 2010

Вы не можете использовать std :: string для получения ошибки, поскольку в ней нет доступного для записи буфера.

Вы можете использовать std :: vector, если хотите использовать STL и не должны обрабатывать память массивов.

const size_t errBufSize = 1024;
std::vector<char> errBuf( errBufSize );
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &errBuf[0]); 

Ваша настоящая ошибка происходит, вероятно, из остальной части кода, например, если вы передаете ему буфер ошибок, вам, вероятно, придется передать ему и размер буфера.

Я думаю, что "Ошибка записи тела" происходит от Curl_write_callback, который не возвращает то же количество байтов, которые были ему переданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...