2014-10-10 2 views
1

Я пытаюсь сделать запрос HTTP POST, я два текстовых входа и 3 файлы, которые будут загруженыCURL - Неизвестный вариант формы

Я не могу показаться, чтобы получить файлы для загрузки, когда я пытаюсь добавить в форму с помощью

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image, CURLFORM_END); 

возвращаемое значение функции является CURL_FORMADD_UNKNOWN_OPTION, я не могу понять, что я делаю не так, вот мой код

CURL *curl; 
CURLcode res; 

struct curl_httppost *formpost = NULL; 
struct curl_httppost *lastptr = NULL; 
static const char buf[] = "Expect:"; 

curl_global_init(CURL_GLOBAL_ALL); 


curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "letter", CURLFORM_COPYCONTENTS, "Letter A",CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "points", CURLFORM_COPYCONTENTS, "a b c", CURLFORM_END); 

// these call return the unknown option 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image, CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "lines", CURLFORM_FILE, lines_image, CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "downsample", CURLFORM_FILE, downsample_image, CURLFORM_END); 


curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "send", CURLFORM_END); 

curl = curl_easy_init(); 

if (curl) { 
    curl_easy_setopt(curl, CURLOPT_URL, url); 
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); 
    res = curl_easy_perform(curl); 
    if (res != CURLE_OK) { 
     // does not go here... 
    } 
    curl_easy_cleanup(curl); 
    curl_formfree(formpost); 
+0

Что 'brush_image' объявлен как, и где она инициализирована? Или, может быть, вы используете более старую версию завитка, которая не поддерживает 'CURLFORM_FILE'? –

+0

Кроме того, вы теряете 'formpost', если' curl_easy_init() 'терпит неудачу. –

+0

Тип brush_image является std :: string, он инициализирован ранее, он имеет значение, которое я проверил с помощью отладчика. – aviran

ответ

2

Вы передаете std::string Varia bles to curl_formadd(). Он не имеет понятия std::string, только char*. Вы можете использовать метод std::string::c_str() передать char* значения:

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image.c_str(), CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "lines", CURLFORM_FILE, lines_image.c_str(), CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "downsample", CURLFORM_FILE, downsample_image.c_str(), CURLFORM_END); 
Смежные вопросы