[Qt] Qt实现HTTP请求 [2013-12-18更新]
来源:互联网 发布:python的全局变量 编辑:程序博客网 时间:2024/05/01 13:25
- 通过QTcpSocket实现
实现原理:通过tcp socket向Web服务器的80端口发送HTTP请求字符串
/*********************************************************
mainwindow.h
*********************************************************/
#include <QMainWindow>
#include <QTcpSocket>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QTcpSocket *tcpSocket;
private slots:
void slotConnected();
void slotReadyRead();
void slotDisconnected();
};
/*********************************************************
mainwindow.cpp
*********************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tcpSocket = new QTcpSocket(this);
connect(tcpSocket, SIGNAL(connected()), this, SLOT(slotConnected()));
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(slotDisconnected()));
// 假设Web服务器的IP地址为192.168.1.239
tcpSocket->connectToHost("192.168.1.239", 80);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotConnected()
{
qDebug() << "connected";
tcpSocket->write("GET / HTTP/1.1\r\n" // “/”表示访问默认主页,可修改为“/cgi-bin/test.cgi”等等
"Connection: Keep-Alive\r\n"
"Accept-Encoding: gzip\r\n"
"Accept-Language: zh-CN,en,*\r\n"
"User-Agent: Mozilla/5.0\r\n"
"Host: 192.168.1.239\r\n\r\n"); // Host必须与目标Web服务器一致
}
void MainWindow::slotReadyRead()
{
qDebug() << "readyread";
qDebug() << QString(tcpSocket->readAll());
}
void MainWindow::slotDisconnected()
{
qDebug() << "disconnected";
}
- 通过QNetworkAccessManager实现
/*********************************************************
mainwindow.h
*********************************************************/
#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QNetworkAccessManager *manager;
QNetworkRequest *request;
QNetworkReply *reply;
private slots:
void slot_ReadyRead();
void slot_ReplyFinished(QNetworkReply*);
};
/*********************************************************
mainwindow.cpp
*********************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this);
request = new QNetworkRequest(QUrl("http://192.168.1.239/cgi-bin/out.cgi?name=name&ok=ok"));
reply = manager->get(*request);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slot_ReplyFinished(QNetworkReply*)));
connect(reply, SIGNAL(readyRead()), this, SLOT(slot_ReadyRead()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slot_ReplyFinished(QNetworkReply *reply)
{
qDebug() << "slot_ReplyFinished";
qDebug() << QString(reply->readAll()).simplified();
}
void MainWindow::slot_ReadyRead()
{
qDebug() << "slot_ReadyRead";
}
- 两种实现方式的比较
1. 通过QTcpSocket实现有助于理解Web服务器的工作方式和HTTP协议,但是返回的结果需要自己去掉HTTP协议头。
2. 通过QNetworkAccessManager实现屏蔽了内部细节,返回的结果会自动去掉HTTP协议头。
0 0
- [Qt] Qt实现HTTP请求 [2013-12-18更新]
- Qt发送HTTP请求
- Qt发送http请求
- Qt发送HTTP请求
- Qt发送HTTP请求
- QT分析之HTTP请求
- QT分析之HTTP请求
- Qt实现Http通信
- [Qt] Qt调用外部程序 [2013-08-12更新]
- Qt同步方式进行http请求
- qt同步方式进行http请求
- Qt--Http请求封装(Get Post)
- Qt 之 使用 https:// 发送 HTTP请求
- Qt--Http请求封装(Get Post)
- QT 发送http请求及处理
- Qt--Http请求封装(Get Post)
- Qt 之 使用 https:// 发送 HTTP请求
- [Qt] Qt鼠标 [2013-08-13更新]
- 在Windows Server 2012下安装.net framework 3.5
- 11往10导
- Hibernate 自动创建表结构
- Android 自定义View(2) -- 绘图的基本知识
- 享受知识饕餮盛宴,尽在2014年课程
- [Qt] Qt实现HTTP请求 [2013-12-18更新]
- C#中窗体程序中的this.SuspendLayout()和this.ResumeLayout()
- Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决
- 黑马程序员_ADO.Net(配置文件的两种写法与使用方法,手动编写SqlHelper类)
- Oracle根据rownum来查找数据
- iOS中UITextField 使用全面解析
- 嵌入式 视频 名词 解释
- 输入框字数提示
- Java虚拟机学习 - 类加载机制