Russian Qt Forum

Qt => Работа с сетью => Тема начата: zosia от Март 04, 2009, 15:37



Название: QHTTP - два запроса
Отправлено: zosia от Март 04, 2009, 15:37
здравствуйте,

помогите решить вроде бы простую задачу: я хочу послать запрос - получить ответ, и ответ этот послать на другой скрипт для обработки - сново получить ответ

просто послать запрос и получить ответ получилось:

Код
C++ (Qt)
http = new QHttp(this);
connect(ui->getit,SIGNAL(clicked()),this,SLOT(sendrequest()));
connect(http, SIGNAL(done(bool)), this, SLOT(done()));
 
void smnd::sendrequest(){
QString url = QString("/script_one.php?text=something");
 
QHttpRequestHeader header = QHttpRequestHeader("POST", url, 1, 1);
header.setValue("Host", "site.ru");
header.setValue("User-Agent", "Mozilla/5.0");
header.setValue("Accept-Encoding", "deflate");
header.setContentLength(8);
header.setValue("Connection", "Close");
 
http->setHost("site.ru");
http->request(header);
 
}
 
void smnd::done(){
QString text = text.fromUtf8( http->readAll() );
ui->showText->setText(text);
}
 


но вот как послать послученный text на другой скрипт и получить ответ?

пробую сделать два QHttp и отловить каждый сигнал done():
Код
C++ (Qt)
http=new QHttp(this);
anotherhttp=new QHttp(this);
connect(ui->getit,SIGNAL(clicked()),this,SLOT(sendrequest()));
connect(http, SIGNAL(done(bool)), this, SLOT(done()));
connect(anotherhttp, SIGNAL(done(bool)), this, SLOT(another_done()));
 
void smnd::sendrequest(){
// tot je kod
}
void smnd::done(){
 
QString text = text.fromUtf8( http->readAll() );
 
QString url = QString("/script_two.php?text=" + text);
 
QHttpRequestHeader xheader = QHttpRequestHeader("POST", url, 1, 1);
xheader.setValue("Host", "site.ru");
xheader.setValue("User-Agent", "Mozilla/5.0");
xheader.setValue("Accept-Encoding", "deflate");
xheader.setContentLength(text.length());
xheader.setValue("Connection", "Close");
 
anotherhttp->setHost("site.ru");
anotherhttp->request(xheader);
 
}
 
void smnd::another_done(){
QString xtext = xtext.fromUtf8( anotherhttp->readAll() );
ui->showText->setText(xtext);
}
 


обрабатывая два запроса ошибка -
Bad Request
Request header field is missing ':' separator.

либо вообще ничего нету=(
как полученный ответ послать на другой скрипт? и получить так же ответ..
может я не правильно делаю? help me out please


Название: Re: QHTTP - два запроса
Отправлено: BRE от Март 04, 2009, 16:01
А что за ответ приходит от первого скрипта? Какой точно текст?


Название: Re: QHTTP - два запроса
Отправлено: zosia от Март 04, 2009, 16:07
HTML, т.е. страница вида:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head></head>
<body> текст, ссылки и т.д.</body>
</html>

т.к. я ооочень не понимаю, как обработать в QT html текст, я хочу этот HTML послать на другой скрипт, обработать спокойно в PHP и вернуть в виде XML, чтобы в QT легче было работать..
такая вот проблема(


Название: Re: QHTTP - два запроса
Отправлено: ритт от Март 04, 2009, 16:12
а deflate поддерживается или это ради красивости?


Название: Re: QHTTP - два запроса
Отправлено: zosia от Март 04, 2009, 16:21
да, поддерживается.
первый ответ приходит всегда, а второй Bad Request(


Название: Re: QHTTP - два запроса
Отправлено: Rcus от Март 04, 2009, 16:40
Ну Bad Request и есть
Цитировать
QHttpRequestHeader::QHttpRequestHeader ( const QString & method, const QString & path, int majorVer = 1, int minorVer = 1 )

Constructs a HTTP request header for the method method, the request-URI path and the protocol-version majorVer and minorVer. The path argument must be properly encoded for an HTTP request.


Название: Re: QHTTP - два запроса
Отправлено: BRE от Март 04, 2009, 16:48
А попробуй так:
Код
C++ (Qt)
void smnd::done()
{
QUrl param( http->readAll() );
QString url = QString( "/script_two.php?text=" ) + param.toEncoded();
 
...
 


Название: Re: QHTTP - два запроса
Отправлено: zosia от Март 04, 2009, 16:56
ааааа!!! спасибо большое ;D
5 часов мучаюсь, всё надо кодировать