PDA

Просмотр полной версии : как отправлять картинку с libcurl в c++


eldar85
15.04.2010, 21:10
сталкнулся с такой проблемой, курл только начал использовать и толком еще не разобрался) и сайт только на английском, а он у меня не очень то)))

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

#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:

M_script_
15.04.2010, 21:23
curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", CURLFORM_FILE, "1.jpg", CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
Почему "picture"? На залил.ру "file" передается

eldar85
15.04.2010, 21:26
спасибо, сейчас попробую))

eldar85
15.04.2010, 21:33
все проверил, работает))) большое вам спасибо!!! работает)))

Ra$cal
15.04.2010, 23:22
лол зачем тебе курл, если используешь Qt? там все проще и логичнее, благодаря единой архитектуре. и учить его достаточно просто.

Ins3t
15.04.2010, 23:27
В дополнение к словам 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

Версию сам выбирай.

eldar85
16.04.2010, 16:26
спасибо всем)) но по советам на кросплатформе, говорят что веб кит кьютишный не обладает такой мощью как курл)) вот и пришлось курл втюхивать в кьюти)) тоже заморок было с этим прикручиванием библиотек, но вроде справился)

M_script_
16.04.2010, 17:54
говорят что веб кит кьютишный не обладает такой мощью как курл))
Возможно, но ты же всю мощь курла не используешь.

eldar85
16.04.2010, 22:44
))))но я собираюсь почти всю его мощь использовать, просто еще плохо с ним знаком)) поэтому такие легкие примеры пока стараюсь делать)) но вообще в планах использовать его на всю катушку)))
а так я веб китом только вывод HTML страници делаю чтобы читабельный вид был))) ну и если нужно чтобы как обычный браузер работала софтина тоже веб кит хорошая вещь)) а вот чтобы что нить зарегать или отправить или еще что нить посложнее тут уже без курла сложновато будет, на мой взгляд... хотя возможно я ошибаюсь, я далеко еще не профи)))

Ra$cal
16.04.2010, 22:47
ошибаешься.

http://qtwiki.org/QHTTP_send_post_request

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

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

там и прокси задавать можно.

eldar85
17.04.2010, 04:35
спасибо большое, почитаю)) вообще по идее Qt мощная вещь и скорее всего в ней достаточно не плохая база для работы с сетью))

eldar85
18.04.2010, 10:46
еще такой вопрос, делаю отправку картинки, посмотрел что в браузере отправляется постом:
-----------------------------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);



но ничего не выходит, что я делаю не так???))

M_script_
18.04.2010, 12:17
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);

eldar85
18.04.2010, 13:15
большое спасибо))) выручили очень))) я так примерно и предпологал, только не знал как вписать эти дополнительные параметры))) еще раз спасибо!!!))