Russian Qt Forum

Qt => Работа с сетью => Тема начата: Torvald от Июль 10, 2017, 16:07



Название: [Решено] Перевод SendPOST на Qt
Отправлено: Torvald от Июль 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 в данном случае - это я потом переделаю)


Название: Re: Перевод SendPOST на Qt
Отправлено: kambala от Июль 10, 2017, 19:38
все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post


Название: Re: Перевод SendPOST на Qt
Отправлено: Torvald от Июль 10, 2017, 19:57
все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post
А эту строчку куда?
"POST /xxx.php HTTP/1.1\r\n"


Название: Re: Перевод SendPOST на Qt
Отправлено: Torvald от Июль 10, 2017, 21:43
все заголовки надо добавлять в QNetworkRequest, а вторым параметром методу post() подавать только тело (body) запроса, т.е. твою переменную post
Спасибо, помогло! Строчку
"POST /xxx.php HTTP/1.1\r\n"
вообще убрал, а /xxx.php добавил к урлу в реквесте.