Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205

POST запрос в WinInet. Данные не добавляются в БД

16.02.2014, 21:41. Показов 5008. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Осваиваю WinInet и пытаюсь отправить POST запрос на сервер. Как ни пытался, данные из str0pt всячески отказываются добавляться в БД. Подскажите, пожалуйста, где ошибка?

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
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
 
#include <stdlib.h>
#include <fstream>
#include <tchar.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    HINTERNET hInternet =
        ::InternetOpen(
            TEXT("WinInet Test"),
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,NULL,
            0);
 
    if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect = 
            ::InternetConnect(
                hInternet,
                TEXT("h49778.srv8.test-hf.ru"),
                INTERNET_DEFAULT_HTTP_PORT,
                NULL,NULL,
                INTERNET_SERVICE_HTTP,
                0,
                1u);
 
        if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest = 
                ::HttpOpenRequest(
                    hConnect,
                    TEXT("POST"),
                    TEXT("/reg.php"),
                    NULL,
                    NULL,
                    0,
                    INTERNET_FLAG_KEEP_CONNECTION,
                    1);
 
            if (hRequest != NULL) {
                
                char strOpt[] = "login=testadd&password=testadd";
                
                BOOL bSend; string strAdd;
             
                // Формируем заголовок
                strAdd = "Accept: */*";
                bSend = ::HttpAddRequestHeaders(hRequest, LPCWSTR(strAdd.c_str()), strAdd.length(), HTTP_ADDREQ_FLAG_ADD);
                strAdd = "Content-Type: application/x-www-form-urlencoded";
                bSend = ::HttpAddRequestHeaders(hRequest, LPCWSTR(strAdd.c_str()), strAdd.length(), HTTP_ADDREQ_FLAG_ADD);
 
                // посылаем запрос
                bSend = ::HttpSendRequest(hRequest, NULL, 0, (void*)strOpt, strlen(strOpt));
 
               //===========================================================================
                printf( "Request closing\n" );
                // закрываем запрос
                ::InternetCloseHandle(hRequest);
            }
            // закрываем сессию
            ::InternetCloseHandle(hConnect);
        }
        // закрываем WinInet
        ::InternetCloseHandle(hInternet);
    }
 
    return 0;
}
Добавлено через 1 час 22 минуты
Ап, что ли...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2014, 21:41
Ответы с готовыми решениями:

Как можно правильно послать запрос через WinInet методом 'POST'?
Кто знает, как можно правильно послать запрос через WinInet методом 'POST'?. Это нужно при заполнении web-формы. Ну, например нужно...

Не передаются данные (Post-запрос)
Все написано вроде бы верно - вот такая форма, но при отправке введенных данных получается это код самой формы &lt;!DOCTYPE...

POST запрос не возвращает данные
POST запрос не возвращает данные. После передачи параметров должна возвратиться страница sinonimus.ru/index.php/index.php#final_text с...

12
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.02.2014, 22:47
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
strAdd = "Content-Type: application/x-www-form-urlencoded"; bSend = ::HttpAddRequestHeaders(hRequest, LPCWSTR(strAdd.c_str()), strAdd.length(), HTTP_ADDREQ_FLAG_ADD);
strAdd - это строка char-ов. Т.е. строка, где один байт на символ.
А HttpAddRequestHeaders, судя по коду, требует LPCWSTR, что есть
Long Pointer to Const Wide-char STRint - указатель на константную wchar-строку.
Обратите внимание: wchar-строку (2 байта на символ), а не char.
0
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
16.02.2014, 23:00  [ТС]
То есть вместо string strAdd мне нужно сделать массив типа wchar? Или как?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.02.2014, 23:14
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
То есть вместо string strAdd мне нужно сделать массив типа wchar?
Просто используйте std::wstring.
0
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
16.02.2014, 23:24  [ТС]
Можете, пожалуйста, привести пример его использования? Объявление переменной и присвоение ей текстового значения.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.02.2014, 23:27
std::wstring Name = L"John";
0
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
16.02.2014, 23:29  [ТС]
В таком случае выдаёт ошибку и присваивается только TEXT("...");
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.02.2014, 23:53
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
В таком случае выдаёт ошибку
http://codepad.org/RSOWG4HE
C++
1
2
3
4
5
6
7
#include <string>
 
int main()
{
    std::wstring Name = L"John";
    return 0;
}
No errors or program output.
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
и присваивается только TEXT("...");
Какую ошибку ? Кому/чему присваивается ?
0
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
17.02.2014, 00:11  [ТС]
Не заметил L изначально. Теперь ошибка исчезла, но запрос-таки в нужном виде до сервера не добирается и в таблицу данные не заносятся..
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.02.2014, 00:22
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Теперь ошибка исчезла, но запрос-таки в нужном виде до сервера не добирается и в таблицу данные не заносятся.
Значит, берем в руки сниффер, смотрим лог запросов-ответов, ищем ошибки.
Если есть образец запроса-ответа, играем в игру под названием "создай свой
запрос и найди 5 отличий". До победного конца. Можно поднять локальный
сервер на локалхосте и отправлять запросы него. Это помогает быстрее
локализовать проблемное место и упрощает тестирование/отладку.

По HTTP-кодам ответа сервера тоже, кстати, многое можно узнать...
0
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
17.02.2014, 00:55  [ТС]
А ведь-таки помогло! Спасибо большое! Полный запрос, пойманный сниффером и сработавший в программе, выглядит так: "login=testadd&password=testadd&submit=% C7%E0%F0%E5%E3%E8%F1%F2%F0%E8%F0%EE%E2%E 0%F2%FC%F1%"
серверу зачем-то понадобилось знать, что данные были отправлены именно кнопкой "зарегистрироваться"
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.02.2014, 01:01
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
полный запрос, пойманный сниффером и сработавший в программе, выглядит так: "login=testadd&password=testadd&submit=% C7%E0%F0%E5%E3%E8%F1 %F2%F0%E8%F0%EE%E2%E0%F2%FC%F1%"
Что это такое идёт после submit?
Это называется URL Encoding или Percent-Encoding.
Данные, передаваемые в запросах "application/x-www-form-urlencoded" (и не только),
должны быть закодированы с помощью URL Encoding.

Описано здесь, например:

HTML URL Encoding Reference
http://www.w3schools.com/TAGs/ref_urlencode.asp

Percent-encoding (Wikipedia)
http://en.wikipedia.org/wiki/Percent-encoding

Ну и первоисточник, конечно же:

Forms in HTML documents (см. раздел Form content types)
http://www.w3.org/TR/html401/interact/forms.html
1
 Аватар для Werewolf_RU
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
17.02.2014, 01:09  [ТС]
Ещё раз спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2014, 01:09
Помогаю со студенческими работами здесь

Поместить в POST запрос данные из TextBox
Привет! Ребят, сразу скажу, что я новичек поэтому, сильно не пинать, если вопрос совсем уж нубский :) Задача у меня такая, нужно...

Http POST request, wininet, winsock
Значит так. Есть PHP скрипт, выводящий все параметры, переданные в запросе. &lt;?php echo &quot;hello!\r\n&quot;; ...

Не выводятся данные, которые передавал post-запрос
Здравствуйте ! Не выводятся данные которые передовал post-ом : index.php &lt;script type=&quot;text/javascript&quot;&gt; ...

Как отправить POST запрос и проверить правильные ли данные
Добрый день! Мне необходимо посылать POST запрос на страницу &quot;http://IP/login.php&quot;. Прослушал сниффером. В запросе передаются такие...

Отправить POST запрос и получить json данные с сервера. Как сделать?
Добрый день. Мне нужно создать html форму с двумя полями username и password, методом POST отправить ее на сервер. Далее получить от...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru