Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   как отправлять картинку с libcurl в c++ (https://forum.antichat.xyz/showthread.php?t=196542)

eldar85 15.04.2010 21:10

как отправлять картинку с libcurl в c++
 
сталкнулся с такой проблемой, курл только начал использовать и толком еще не разобрался) и сайт только на английском, а он у меня не очень то)))

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

#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
говорят что веб кит кьютишный не обладает такой мощью как курл))

Возможно, но ты же всю мощь курла не используешь.

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

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


Время: 10:25