Russian Qt Forum
Март 29, 2024, 04:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Перевод SendPOST на Qt  (Прочитано 4641 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« : Июль 10, 2017, 16:07 »

Есть делфийский код, в котором средствами WinApi делается post запрос:
Код
Delphi
Result := SendPOST('http://www.xxx.ru', StringToAnsi(Query, CP_ACP), Answer);
где Query выглядит так:
Код:
POST /xxx.php HTTP/1.1
Host: www.xxx.ru
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; WebMoney Advisor; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept: /
Accept-Encoding: identity
Accept-Language: ru-RU
Connection: Close
Content-Type: application/x-www-form-urlencoded
Content-Length: 103

email=xxxxxxxxx@xxxxxx.ru&key=xxxxxxxxxxxxxxxxxxxx&id=xxxxxx&h=3ffdfe2d17d892aedc681b010598337c&check=1
Вопрос в том, как корректно это сделать на Qt. Судя по тому, что пишут в интернетах, нужно часть строк переписать на setRawHeader, но у меня ничего не получается - ответ от сервера всегда один - мол, не понятно, что ты мне вообще прислал.
В общем моя попытка:
Код
C++ (Qt)
QString post = "email=" + email + "&key=" + key + "&id=" +
id + "&h=" + hardId + "&check=" + ch + "&getd=1";
 
QString query = "POST /xxx.php HTTP/1.1\r\n"
"Host: www.xxx.ru\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; "
"Trident/4.0; WebMoney Advisor; SLCC2; .NET CLR 2.0.50727; "
".NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\r\n"
"Accept: /\r\n"
"Accept-Encoding: identity\r\n"
"Accept-Language: ru-RU\r\n"
"Connection: Close\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: " + QString::number(post.size()) + "\r\n\r\n" +
post;
 
QNetworkRequest request("http://www.xxx.ru");
 
manager.post(request, query.toLocal8Bit());

Осложняется еще все тем, что данные передаются/принимаются в кодировке 1251 (toLocal8Bit в данном случае - это я потом переделаю)
« Последнее редактирование: Июль 10, 2017, 21:45 от Torvald » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #1 : Июль 10, 2017, 19:38 »

все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #2 : Июль 10, 2017, 19:57 »

все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post
А эту строчку куда?
"POST /xxx.php HTTP/1.1\r\n"
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #3 : Июль 10, 2017, 21:43 »

все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post
Спасибо, помогло! Строчку
"POST /xxx.php HTTP/1.1\r\n"
вообще убрал, а /xxx.php добавил к урлу в реквесте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 22.