Russian Qt Forum

Qt => Вопросы новичков => Тема начата: cuzace от Ноябрь 25, 2014, 15:06



Название: Http запрос с помощью QTcpSocket
Отправлено: cuzace от Ноябрь 25, 2014, 15:06
Здравствуйте.
Пытаюсь отправить хттп запрос в чистом виде, т.е. без использования QNetworkAccessManager, судя по всему, для этого нужно использовать QTcpSocket.
Код:
void MainWindow::start()
{
    socket = new QTcpSocket();
    connect(socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error(QAbstractSocket::SocketError)));
    connect(socket,SIGNAL(connected()),this,SLOT(connected()));
    connect(socket,SIGNAL(readyRead()),this,SLOT(read()));
    socket->connectToHost("google.com",80);
}

void MainWindow::error(QAbstractSocket::SocketError error)
{
    qDebug()<<error;
}

void MainWindow::connected()
{
    qDebug()<<"Connected";
    socket->write("GET / HTTP/1.0\r\n");

}

void MainWindow::read()
{
    qDebug()<<"Read";
    qDebug()<<socket->readAll();
}
Connected срабатывает, но после этого ничего не происходит, хотя с локальным QTcpServer'ом все работает как надо.
Тут что-то неправильно или это проблемы с доступом к интернету?


Название: Re: Http запрос с помощью QTcpSocket
Отправлено: alex312 от Ноябрь 25, 2014, 16:32
Тут что-то неправильно или это проблемы с доступом к интернету?
Сейчас сайты умные пошли, на простой GET не отвечают, а гугл так вообще забанить может.


Название: Re: Http запрос с помощью QTcpSocket
Отправлено: cuzace от Ноябрь 25, 2014, 20:13
И как с ними работать? Prog.org.ru тоже не отвечает, хотя соединение устанавливается и write вроде как срабатывает без ошибок


Название: Re: Http запрос с помощью QTcpSocket
Отправлено: Alex Custov от Ноябрь 25, 2014, 20:30
И как с ними работать? Prog.org.ru тоже не отвечает, хотя соединение устанавливается и write вроде как срабатывает без ошибок

Думаю передавать HTTP заголовки, которые передаёт любой браузер.


Название: Re: Http запрос с помощью QTcpSocket
Отправлено: cuzace от Ноябрь 25, 2014, 21:40
Нужно было отправить \r\n еще раз, сервер судя по всему ждал пустую строку, поэтому не отвечал