deadbyelpy
@deadbyelpy
веб-шмеб

Беды новичка или curl_easy_perform -> segfault

Предистория: я не владею и средними знаниями в си. Волею судьбы так случилось, что пришлось написать простой загрузчик файлов на си. Есть подозрения на то что недостаточно правильно прочитал документацию cUrl, но взял пример с их документации.

CURL *curl;
curl = curl_easy_init();
if(!curl) {
            fprintf(stderr, "curl init() failed: ");
            return token;
}
// используется библиотека cJSON для чтения конфига
const char * password = cJSON_GetObjectItem(service,"password")->valuestring;
const char * login = cJSON_GetObjectItem(service,"login")->valuestring;
const char * url = cJSON_GetObjectItem(service,"url")->valuestring;
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_HEADER, "Content-Type: text/xml; charset=UTF-8");
// тут генерируется xml, читается файл с xml шаблоном запроса, логина и пароля заменяются в нужных местах
const char * xml = generate_xml(login, password);

curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, xml);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE , strlen(xml));
// хотелось бы конечно писать результат, но для начала хоть запрос бы выполнить
//curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
//curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
CURLcode res;
res = curl_easy_perform(curl);

printf("break!\n");
exit(0);


т.е. до "break!" не доходит. вылетает с Segmentation fault и ну хоть бы какая инфа, а нет держи сегфалт и думай в чем ты провинился.
  • Вопрос задан
  • 3245 просмотров
Решения вопроса 1
deadbyelpy
@deadbyelpy Автор вопроса
веб-шмеб
проблема была в том что url был https, и не указывая путь к CURLOPT_CAINFO и не устанавливая CURLOPT_SSL_VERIFYHOST = 0, curl вылетал с segfault
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
до "break!" не доходит. вылетает с Segmentation fault и ну хоть бы какая инфа


Соберите программу с отладочной информацией и запустите её в gdb.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы