Bloklamayan HTTP form-post (Non-blocking HTTP form-post)
Bu örnek, multi arayüzünü kullanarak çok parçalı bir form gönderisi (multipart form-post) yapar.
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLM *multi_handle;
int still_running = 0;
curl_mime *form = NULL;
curl_mimepart *field = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
curl = curl_easy_init();
multi_handle = curl_multi_init();
if(curl && multi_handle) {
/* Formu oluştur */
form = curl_mime_init(curl);
/* Dosya yükleme alanını doldur */
field = curl_mime_addpart(form);
curl_mime_name(field, "sendfile");
curl_mime_filedata(field, "multi-post.c");
/* Dosya adı alanını doldur */
field = curl_mime_addpart(form);
curl_mime_name(field, "filename");
curl_mime_data(field, "multi-post.c", CURL_ZERO_TERMINATED);
/* Nadiren gerekse bile gönder alanını da doldur */
field = curl_mime_addpart(form);
curl_mime_name(field, "submit");
curl_mime_data(field, "send", CURL_ZERO_TERMINATED);
/* özel başlık listesini başlat (Expect: 100-continue
istenmediğini belirterek */
headerlist = curl_slist_append(headerlist, buf);
/* bu POST'u hangi URL alır */
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/upload.cgi");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
curl_multi_add_handle(multi_handle, curl);
do {
CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
if(still_running)
/* aktivite, zaman aşımı veya "hiçbir şey" bekle */
mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
if(mc)
break;
} while(still_running);
curl_multi_cleanup(multi_handle);
/* her zaman temizle */
curl_easy_cleanup(curl);
/* sonra formu temizle */
curl_mime_free(form);
/* slist'i serbest bırak */
curl_slist_free_all(headerlist);
}
return 0;
}