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

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

16.02.2014, 21:41. Показов 4933. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru