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

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

Войти
Регистрация
Восстановить пароль
 
Werewolf_RU
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
#1

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

16.02.2014, 21:41. Просмотров 932. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос POST запрос в WinInet. Данные не добавляются в БД (C++):

Файл: В файле с произвольным доступом данные добавляются в конец, а не в нужное... - C++
Не могу разобраться с записью файлов произвольного доступа, хочу создать файл, который вмещает пустую базу клиентов, и постепенно её...

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

Отправить POST запрос - C++
Помогите уже, реально задолбался, 2 дня уже ищу рабочий код который бы отправлял пост запрос но никак не могу найти. Везде какие-то либы...

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 скрипта, си. Подскажите пожалуйста

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

12
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
16.02.2014, 22:47 #2
Цитата Сообщение от 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
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
16.02.2014, 23:00  [ТС] #3
То есть вместо string strAdd мне нужно сделать массив типа wchar? Или как?
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
16.02.2014, 23:14 #4
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
То есть вместо string strAdd мне нужно сделать массив типа wchar?
Просто используйте std::wstring.
0
Werewolf_RU
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
16.02.2014, 23:24  [ТС] #5
Можете, пожалуйста, привести пример его использования? Объявление переменной и присвоение ей текстового значения.
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
16.02.2014, 23:27 #6
std::wstring Name = L"John";
0
Werewolf_RU
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
16.02.2014, 23:29  [ТС] #7
В таком случае выдаёт ошибку и присваивается только TEXT("...");
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
16.02.2014, 23:53 #8
Цитата Сообщение от 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
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
17.02.2014, 00:11  [ТС] #9
Не заметил L изначально. Теперь ошибка исчезла, но запрос-таки в нужном виде до сервера не добирается и в таблицу данные не заносятся..
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
17.02.2014, 00:22 #10
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Теперь ошибка исчезла, но запрос-таки в нужном виде до сервера не добирается и в таблицу данные не заносятся.
Значит, берем в руки сниффер, смотрим лог запросов-ответов, ищем ошибки.
Если есть образец запроса-ответа, играем в игру под названием "создай свой
запрос и найди 5 отличий". До победного конца. Можно поднять локальный
сервер на локалхосте и отправлять запросы него. Это помогает быстрее
локализовать проблемное место и упрощает тестирование/отладку.

По HTTP-кодам ответа сервера тоже, кстати, многое можно узнать...
0
Werewolf_RU
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
17.02.2014, 00:55  [ТС] #11
А ведь-таки помогло! Спасибо большое! Полный запрос, пойманный сниффером и сработавший в программе, выглядит так: "login=testadd&password=testadd&submit=%C7%E0%F0%E5%E3%E8%F1%F2%F0%E8%F0%EE%E2%E0%F2%FC%F1%"
серверу зачем-то понадобилось знать, что данные были отправлены именно кнопкой "зарегистрироваться"
0
Убежденный
Системный программист
Эксперт С++
15618 / 7127 / 1128
Регистрация: 02.05.2013
Сообщений: 11,567
Записей в блоге: 1
Завершенные тесты: 1
17.02.2014, 01:01 #12
Цитата Сообщение от 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
8 / 8 / 3
Регистрация: 03.02.2014
Сообщений: 202
Завершенные тесты: 1
17.02.2014, 01:09  [ТС] #13
Ещё раз спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 01:09
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
17.02.2014, 01:09
Ответ Создать тему
Опции темы

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