Предистория: я не владею и средними знаниями в си. Волею судьбы так случилось, что пришлось написать простой загрузчик файлов на си. Есть подозрения на то что недостаточно правильно прочитал документацию 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 и ну хоть бы какая инфа, а нет держи сегфалт и думай в чем ты провинился.