Qt|Http笔记-两种方式发送http协议数据,获取服务器数据(GET方法)
生活随笔
收集整理的這篇文章主要介紹了
Qt|Http笔记-两种方式发送http协议数据,获取服务器数据(GET方法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
背景
演示
搭建Java Web環境
QTcpSocket獲取服務器數據
QNetworkAccessManager獲取服務器數據
?
背景
Qt中有2個方式可以實現HTTP協議的發送,一個是使用QNetworkAccessManager,這個是非常常見的,另外是使用QTcpSocket自己構造HTTP格式,也是可以的。
?
演示
web程序運行如下:
輸入10086后:
?
使用telnet獲取web網站數據:
發送命令以及接收如下:
?
使用QNetworkAccessManager獲取服務器數據:
使用QTcpSocket獲取數據:
?
搭建Java Web環境
java源碼結構如下:
?
源碼如下:
DataSource.java
package my;import java.util.ArrayList;public class DataSource {ArrayList<Record> m_records = new ArrayList<Record>();public DataSource(){m_records.add(new Record("XiaoMing", "10086"));m_records.add(new Record("XiaoHong", "10087"));m_records.add(new Record("XiaoGang", "10088"));}public Record query(String qq){for(Record e : m_records){if(e.qq.equals(qq)){return e;}}return null;}public class Record {public String name = "";public String qq = "0000";public Record(String name, String qq){this.name = name;this.qq = qq;}} }index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form method="get" action="query.jsp" >輸入QQ號<input type="text" name="qq" /> <input type="submit" value="提交" /></form></body> </html>query.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'query.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%@ page import="my.*" %><%String qq = request.getParameter("qq");DataSource db = new DataSource();DataSource.Record result = db.query(qq);if(result == null){out.print("<p> 不存在此記錄 </p> ");} else{out.print("<p> 姓名: " + result.name + ", QQ: " + result.qq + "</p>");}%></body> </html>?
QTcpSocket獲取服務器數據
程序結構如下:
widget.ui如下:
源碼:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QTcpSocket; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();protected slots:void btnClicked();void onConnect();void onReadyRead();private:Ui::Widget *ui;QTcpSocket *m_socket; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QMessageBox> #include <QTcpSocket> #include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("QTcpSocket");m_socket = new QTcpSocket(this);connect(m_socket, SIGNAL(connected()), this, SLOT(onConnect()));connect(m_socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked())); }Widget::~Widget() {delete ui; }void Widget::btnClicked() {m_socket->connectToHost("47.101.40.99", 8080); }void Widget::onConnect() {m_socket->write("GET /GetPostDemo/query.jsp?qq=10086\r\n""Host: 47.101.40.99\r\n\r\n"); }void Widget::onReadyRead() {qDebug() << QString::fromUtf8(m_socket->readAll()); }?
QNetworkAccessManager獲取服務器數據
程序結構如下:
widget.ui是這樣的:
源碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void btnClicked();void replyFinished(QNetworkReply *reply);private:Ui::Widget *ui;QNetworkAccessManager *m_manager; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QNetworkAccessManager> #include <QNetworkReply> #include <QUrl>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("QNetworkAccessManager");m_manager = new QNetworkAccessManager(this);connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked()));connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); }Widget::~Widget() {delete ui; }void Widget::btnClicked() {m_manager->get(QNetworkRequest(QUrl("http://47.101.40.99:8080/GetPostDemo/query.jsp?qq=10086"))); }void Widget::replyFinished(QNetworkReply *reply) {qDebug() << QString::fromUtf8(reply->readAll()); }?
?
?
總結
以上是生活随笔為你收集整理的Qt|Http笔记-两种方式发送http协议数据,获取服务器数据(GET方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt杂记-QQuick之Android隐
- 下一篇: Java笔记-WEB算术验证码