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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: ConnectToHost  (Прочитано 5068 раз)
merke
Гость
« : Октябрь 11, 2009, 15:05 »

Всем привет! Тут решил разобраться с сокета в Qt, раньше писал на VB.
В общем хотел приконнектиться к хосту и послать какой либо заголовок и получить ответ от сервера. К примеру коннекчусь к www.yahoo.com по 80 порту. Посылаю определённый составленный заголовок, а в ответ вообще ни чего не получаю, хотя даже если заголовок будет сформирован неверно должно придти хоть что нибудь.

Привожу код:

Код
C++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
   socket = new QTcpSocket(this);
   ui->setupUi(this);
   connect(socket, SIGNAL(readyRead()), this, SLOT(ReadData()));
   connect(this->socket, SIGNAL(connected()), this, SLOT(ConSuc()));
   connect(this->socket, SIGNAL(connected()), this, SLOT(SendData()));
   QTimer::singleShot(1000, this, SLOT(ConnectToServer()));
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::ConnectToServer()
{
   this->socket->connectToHost("www.yahoo.com", 80);
}
 
void MainWindow::ConSuc()
{
   qDebug() << "Connected";
}
 
void MainWindow::ReadData()
{
    qDebug() << "Recieve";
    QByteArray block;
    block = socket->readAll();
    qDebug() << block;
}
 
void MainWindow::SendData()
{
QString str;
QByteArray ar;
   str = "POST HTTP/1.0\r\n"
     "Accept: */*\r\n"
     "Content-Type: application/x-www-form-urlencoded\r\n"
     "Host: www.yahoo.com\r\n"
     "Content-Length: 10\r\n"
     "Accept-Charset: cp-1251\r\n"
     "Connection: Keep-Alive\r\n \r\n";
   ar.append(str);
   this->socket->write(ar);
   qDebug() << "Send complete";
}

Да может заголовок составлен как мне кажется не правильно, но всё же беда не в этом я от сервера вообще ни чего не получаю.
Помогите, пожалуйста, буду очень благодарен!
Записан
Rcus
Гость
« Ответ #1 : Октябрь 11, 2009, 15:31 »

Советую оригинал http://www.faqs.org/rfcs/rfc1945.html.
 - path не указан.
 - Connection параметр появился только в HTTP/1.1
 - тело запроса не передано?
 - лучше использовать QNetworkAccessManager
Записан
merke
Гость
« Ответ #2 : Октябрь 13, 2009, 14:29 »

Решение нашёл использованием QHttp

QString hed = QString(какой то скрипт);
QString hl = QString("ACT=LISTGET");
QByteArray ba("ACT=LISTGET");
QHttpRequestHeader header = QHttpRequestHeader("POST", hed,1,1);
        header.setValue("Accept", "*/*");
        header.setValue("Content-Type", "application/x-www-form-urlencoded");
        header.setValue("Host", "какой то хост");
        header.setValue("Content-Length", QString(ba.length()));
        header.setValue("Accept-Charset", "cp-1251");
        header.setValue("Connection", "Keep-Alive");
        http->setHost("какой то хост"");
        http->request(header,ba);
Записан
SimpleSunny
Гость
« Ответ #3 : Октябрь 13, 2009, 19:33 »

QHttp лучше не использовать, так как он deprecated и содержит ошибки при работе через прокси. Вместо него лучше использовать QNetworkAccessManager, как посоветовали выше.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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