как отправлять картинку с libcurl в c++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by eldar85, 15 Apr 2010.

  1. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    сталкнулся с такой проблемой, курл только начал использовать и толком еще не разобрался) и сайт только на английском, а он у меня не очень то)))

    так вот попробывал отправить так:

    #include <QtCore/QCoreApplication>

    #include <stdio.h>
    #include <curl/curl.h>
    #include <c++/iostream>

    int main(int argc, char* argv[])
    {
    CURL* curl;
    char url[] = "http://zalil.ru/upload/";
    char proxy[] = "92.50.163.114";
    long port = 8085;
    char error[200];
    struct curl_httppost* post = NULL;
    struct curl_httppost* last = NULL;


    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();
    curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", CURLFORM_FILE, "1.jpg", CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
    curl_easy_setopt(curl, CURLOPT_URL, url);
    // curl_easy_setopt(curl, CURLOPT_PROXY, "120.29.240.58:8080");
    //curl_easy_setopt(curl, CURLOPT_PROXYPORT, port);
    //curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_HEADER, 1);
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
    // printf("\nTrying proxy [%s:%d]:\n", proxy, port);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
    curl_easy_perform(curl);
    // printf("Cannot perform\nError:%s\n", error);
    int i;
    std::cin >> i;

    return 0;
    }

    но кажется я что то сделал не правельно. в консоли выводит страницу и файл нифига не отправлен... как быть?? :confused:
     
  2. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Почему "picture"? На залил.ру "file" передается
     
  3. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    спасибо, сейчас попробую))
     
  4. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    все проверил, работает))) большое вам спасибо!!! работает)))
     
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    лол зачем тебе курл, если используешь Qt? там все проще и логичнее, благодаря единой архитектуре. и учить его достаточно просто.
     
  6. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    В дополнение к словам Ra$cal'a:
    http://qt.nokia.com/doc/2.3/network.html
    http://doc.crossplatform.ru/qt/4.3.2/qtnetwork.html
    http://doc.crossplatform.ru/qt/en/4.6.x/qtnetwork.html

    Версию сам выбирай.
     
    #6 Ins3t, 15 Apr 2010
    Last edited: 15 Apr 2010
  7. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    спасибо всем)) но по советам на кросплатформе, говорят что веб кит кьютишный не обладает такой мощью как курл)) вот и пришлось курл втюхивать в кьюти)) тоже заморок было с этим прикручиванием библиотек, но вроде справился)
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Возможно, но ты же всю мощь курла не используешь.
     
  9. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    ))))но я собираюсь почти всю его мощь использовать, просто еще плохо с ним знаком)) поэтому такие легкие примеры пока стараюсь делать)) но вообще в планах использовать его на всю катушку)))
    а так я веб китом только вывод HTML страници делаю чтобы читабельный вид был))) ну и если нужно чтобы как обычный браузер работала софтина тоже веб кит хорошая вещь)) а вот чтобы что нить зарегать или отправить или еще что нить посложнее тут уже без курла сложновато будет, на мой взгляд... хотя возможно я ошибаюсь, я далеко еще не профи)))
     
  10. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ошибаешься.

    http://qtwiki.org/QHTTP_send_post_request

    и иже с ними. для посылки запросов в кьюте не мало удобных штук.

    http://qt.nokia.com/doc/4.6/qhttp.html

    там и прокси задавать можно.
     
    1 person likes this.
  11. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    спасибо большое, почитаю)) вообще по идее Qt мощная вещь и скорее всего в ней достаточно не плохая база для работы с сетью))
     
  12. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    еще такой вопрос, делаю отправку картинки, посмотрел что в браузере отправляется постом:
    -----------------------------169443243924626
    Content-Disposition: form-data; name="act"

    add
    -----------------------------169443243924626
    Content-Disposition: form-data; name="from"

    file
    -----------------------------169443243924626
    Content-Disposition: form-data; name="new_photo"; filename="000001103_s.jpeg"
    Content-Type: image/jpeg
    ...........тут код картинки на китайском)))............

    я делаю отправку курлом так:

    struct curl_httppost* Post = NULL;
    struct curl_httppost* last = NULL


    curl_formadd(&Post, &last, CURLFORM_COPYNAME, "new_photo", CURLFORM_FILE, image.c_str(), CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, Post);

    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    curl_easy_setopt(curl, CURLOPT_HEADER, header);
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");



    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, followFlag);
    curl_easy_setopt(curl, CURLOPT_REFERER, referer.c_str());


    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "c:/cookie.txt");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "c:/cookie.txt");
    curl_easy_perform(curl);



    но ничего не выходит, что я делаю не так???))
     
    #12 eldar85, 18 Apr 2010
    Last edited: 18 Apr 2010
  13. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    curl_formadd(&Post, &last, CURLFORM_COPYNAME, "act", CURLFORM_COPYCONTENTS, "add", CURLFORM_END);
    curl_formadd(&Post, &last, CURLFORM_COPYNAME, "from", CURLFORM_COPYCONTENTS, "file", CURLFORM_END);
    curl_formadd(&Post, &last, CURLFORM_COPYNAME, "new_photo", CURLFORM_FILE, image.c_str(), CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
     
  14. eldar85

    eldar85 New Member

    Joined:
    27 Aug 2009
    Messages:
    126
    Likes Received:
    1
    Reputations:
    0
    большое спасибо))) выручили очень))) я так примерно и предпологал, только не знал как вписать эти дополнительные параметры))) еще раз спасибо!!!))