Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
POST_HTTP
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 1
#1

Отправить POST запрос - C++

01.08.2015, 01:23. Просмотров 1293. Ответов 8
Метки нет (Все метки)

Помогите уже, реально задолбался, 2 дня уже ищу рабочий код который бы отправлял пост запрос но никак не могу найти. Везде какие-то либы или паки исходников которые нужно проинсталлить, но даже после инсталла вроде бы код рабочий, но при компиляции выдает кучу ошибок а-ля "ссылка на неразрешенный внешний символ и т.п."

Нашел для GET запроса - Пример POST запроса . Автор сказал что POST по аналогии. Заменил гет на пост, вроде бы идет, но большой объем не тянет (даже текстовик весом в 2 кб)

Просьба помочь в данном вопросе, у кого есть рабочий код отправки пост запроса который бы не крашился при объеме текста от 2 кб. Заранее спасибо.

Добавлено через 31 минуту
вроде бы тот код заработал (массивы подправил). теперь другая проблема - как отправить инфу с текстовика через запрос этот? отправляется только первая строчка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 01:23     Отправить POST запрос
Посмотрите здесь:

Как на с++(юникс) отправить http post запрос без сторонних библиотек - C++
Ответ сервера не важен, главное - послать пост-запрос. boost, libcurl и прочее использовать нельзя. Подскажите, как это проще всего...

Как отправить http get запрос? - C++
Подскажите пожалуйста, как отправить http get запрос. Простой. Суть его заключается в том, что мы отправляем запрос на сайт. А сайт...

Отправить запрос на сайт и получить ответ - C++
http://vsereshu-ru.1gb.ru/MathLogic.aspx помогите отправить на этом сайте текст например "AvBvB" для решения и получить ответ в консоли...

Post запрос - C++
1) Здравствуйте, в общем я пытаюсь написать программу для одного сайта, все получается авторизация готова, но делаю 1 функцию не могу...

POST запрос, XML в c++ - C++
POST /feeds/api/users/default/subscriptions HTTP/1.1 Host: gdata.youtube.com Content-Type: application/atom+xml Content-Length:...

Post запрос php из клиента C++ - C++
Как отправить из си, значение пост запроса php скрипту. Также, как принять post запрос от php скрипта, си. Подскажите пожалуйста

POST запрос в WinInet. Данные не добавляются в БД - C++
Осваиваю WinInet и пытаюсь отправить POST запрос на сервер. Как ни пытался, данные из str0pt всячески отказываются добавляться в БД....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.08.2015, 14:18     Отправить POST запрос #2
Увеличь размер массива message до нужного.
POST_HTTP_2
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 2
01.08.2015, 19:41     Отправить POST запрос #3
Цитата Сообщение от castaway Посмотреть сообщение
Увеличь размер массива message до нужного.
у меня и так все массивы по 9999, не помогает. отправляется только первая строка.
получаю данные таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
size_t count = 0;
    char S;
    ifstream f(fname);
    while (!f.eof())
    {
        f.get(S);
        count++;
    }
    f.close();
    char *S2 = new char[count];
    for (int i = 0; i < count; i++) S2[i] = NULL;
    ifstream f2(fname);
    int i = 0;
    while (!f2.eof())
    {
        f2.get(S2[i]);
        i++;
    }
    f2.close();
cout выдает нормально (весь текст), но не отправляет как надо.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.08.2015, 19:43     Отправить POST запрос #4
Не вижу что у тебя там по 9999. Я говорил про этот пост.
POST_HTTP_2
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 2
01.08.2015, 19:47     Отправить POST запрос #5
дак это не мой код, я его подредактировал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
int sendget(char getter[9999], char datter[9999])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data))
    {
        printf("WSAStartup error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    if (wsa_data.wVersion != 0x101)
    {
        printf("Bad WSA version (%i)\n", wsa_data.wVersion);
        system("pause");
        return -1;
    }
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
    {
        printf("socket error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    int use_host_name = 1;
    char host_name[256];
    strcpy_s(host_name, getter);
    char host_ip[256];
    int host_port = 80;
 
    char doc[9999] = "/login.php?message=";
    char aaa[9999];
 
 
    strcpy_s(aaa, doc);
    strcat_s(aaa, datter);
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(host_port);
    sa.sin_addr.S_un.S_addr = use_host_name ? get_addr(host_name) : inet_addr(host_ip);
 
    printf("wait for server...\n");
 
    while (true)
    {
        int connect_res = connect(s, (SOCKADDR *)&sa, sizeof(sa));
        if (!connect_res) break;
 
        Sleep(250);
    }
 
    printf("connected\n");
 
    char message[9999];
 
    int message_size = sprintf_s
        (
        message,
        "POST [url]http://%s:%i%s[/url] HTTP/1.1\r\n"
        "Host: %s:%i\r\n"
        "Content-Type: application/x-www-form-urlencoded\r\n"
        "Connection: Close\r\n"
        "\r\n",
        (use_host_name ? host_name : host_ip),
        host_port,
        aaa,
        (use_host_name ? host_name : host_ip),
        host_port
        );
 
    if (send(s, message, message_size, 0) == SOCKET_ERROR)
    {
        printf("send error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    char buffer[100000];
    int buffer_size = sizeof(buffer);
    buffer_size = recv(s, buffer, buffer_size, 0);
    if (buffer_size == SOCKET_ERROR)
    {
        printf("recv error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
    buffer[buffer_size] = '\0';
    printf("from_server: %s\n", buffer);
 
    closesocket(s);
 
    WSACleanup();
}
чую я что ошибка в том что отправляю я пост как гет. подскажете в чем проблема?
Renji
1875 / 1273 / 290
Регистрация: 05.06.2014
Сообщений: 3,630
01.08.2015, 22:03     Отправить POST запрос #6
Цитата Сообщение от POST_HTTP Посмотреть сообщение
Нашел для GET запроса - Пример POST запроса . Автор сказал что POST по аналогии. Заменил гет на пост, вроде бы идет, но большой объем не тянет (даже текстовик весом в 2 кб)
Нда... Нужно было удалить гланды. Нашел пример прокалывания прыща иголкой. Заменил иголку скальпелем, но почему-то теперь очень болит шея.

Используйте curl и не выпендривайтесь. С уровнем познаний "скопировал код с форума" лезть в ручное формирование multipart/form запросов и их отправку через сокеты нельзя.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
curl_global_init(CURL_GLOBAL_ALL);//один раз на всю программу
CURL *curl = curl_easy_init();
 
curl_httppost* post = 0;
curl_httppost* last = 0;
//по строчке на каждое поле запроса
curl_formadd(&post, &last, CURLFORM_COPYNAME, "user",
              CURLFORM_COPYCONTENTS, "user name", CURLFORM_END);
 
//пихаем запрос в недра curl
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
//указываем куда его слать
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
//поехали!
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK)
    cout<<"ops..."<<endl;
 
curl_formfree(post);
curl_easy_cleanup(curl);
curl_global_cleanup();
HTTP_POST
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 6
01.08.2015, 23:09     Отправить POST запрос #7
Цитата Сообщение от POST_HTTP Посмотреть сообщение
Везде какие-то либы или паки исходников которые нужно проинсталлить, но даже после инсталла вроде бы код рабочий, но при компиляции выдает кучу ошибок а-ля "ссылка на неразрешенный внешний символ и т.п."
Держи:
Отправить POST запрос

CURL работает там где есть либа zlib или прочие. нужен чистый код что работал бы без зависимостей, поэтому пытался заюзать тот код. Давайте не будем давать советов что я и так бы нашел без вас в гугле?
P.S.: извините за мульты, просто забываю сделать сохранение майла-пасса в браузере, на это раз сохранил.
Renji
1875 / 1273 / 290
Регистрация: 05.06.2014
Сообщений: 3,630
02.08.2015, 01:18     Отправить POST запрос #8
Цитата Сообщение от HTTP_POST Посмотреть сообщение
CURL работает там где есть либа zlib или прочие. нужен чистый код что работал бы без зависимостей, поэтому пытался заюзать тот код.
Такой код будет работать не везде и не всегда. Например, в Википедии принудительно включен HTTPS, который без библиотек шифрования работать не будет. Не ставится curl, берите Qt, создавайте объект QNetworkAccessManager и пинайте у него метод post. Qt то у вас, надеюсь, ставится нормально?
Цитата Сообщение от HTTP_POST Посмотреть сообщение
Давайте не будем давать советов что я и так бы нашел без вас в гугле?
Не отвечать же "а на Гугле забанили?". Гугл, "POST запрос", четвертая ссылка содержит подробное описание того, как должен выглядеть текст запроса (раздел 3.1). Раз вы пытаетесь сформировать запрос тупой заменой GET на POST, вы эту самую четвертую ссылку не открывали. Вот ответ под ваш уровень лени и был подогнан - "не выпендривайся, возьми средства попроще".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 12:23     Отправить POST запрос
Еще ссылки по теме:

Отправить байт на COM-порт - C++
может кто консольное приложение написать для отправки байта на COM-порт? на COM4 подключен контроллер на который нужно отправить байт...

Как строку отправить на принтер - C++
Предположим у меня есть набор строк S1, S2, ... , Sn, как их отправить на печать? Какие библиотеки и функции для этого нужно использовать?

Как отправить E-mail Dev C++ - C++
Долго искал в гугле, но так и не нашел работающего кода для отправки e-mail. Желательно, чтобы можно было прикреплять файлы к отправке.

Нужно отправить данные письмом - C++
Не понимаю как мне прикрепить файл который создаётся в программе. #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;time.h&gt; ...

Как отправить структуру в функцию? - C++
Как отправить массив структур в функцию при использовании typedef? Вот на таком примере: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
02.08.2015, 12:23     Отправить POST запрос #9
HTTP_POST, POST_HTTP_2, POST_HTTP, 5.12
Запрещено создавать несколько учетных записей (пользователей-клонов).
Yandex
Объявления
02.08.2015, 12:23     Отправить POST запрос
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru