目录

背景

演示

搭建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_H

main.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_H

main.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方法)相关推荐

  1. Qt创建线程两种方式的区别

    使用QT创建线程有两种方式,方式A使用moveToThread,方式B是直接继承QThread.差异主要在于方式A的槽函数将会在新线程中运行,而方式B的槽函数在旧线程中运行. 结论如下: PS:旧线程 ...

  2. Qt工作笔记-三种方式解决Qt5中文编码问题

    目录 前言 方式一 方式二 方式三 三种方式解决Qt5中文编码问题 前言 这里不谈原理,只说如何去做! 这里本人自己总结下,今天遇到了新的编码问题,在此记录下,方面以后快速调用. 把这三种方法顺序试下 ...

  3. Qt工作笔记-两种方法从容器中筛选出父类和子类(继承法、typeid法)

    两种方法程序运行界面效果都一样! 程序运行截图如下: 这个图随便看看就可以了,没啥用! 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...

  4. Neo4j的两种方式访问(嵌入式访问、服务器模式访问)-- java客户端连接和SpringBoot整合Neo4j

    一.Neo4j数据库访问 1.Neo4j数据库访问 嵌入式数据库 服务器模式(通过REST的访问) 它是由应用程序的性质(neo4j是独立服务器 还是和程序在一起),性能,监控和数据安全性来决定架构选 ...

  5. jetty服务器上运行html页面,web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)...

    自制Jetty服务类 这种方式可以支持websocket,如果项目中需要使用到可以试试这种. 首先pom.xml引入jetty的依赖: org.eclipse.jetty.aggregate jett ...

  6. 用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。

    //用Java实现斐波那契数列(Fibonacci) public class Test {public int f(int n)//n代表第几个数字.程序返回它相应的值{return n>2? ...

  7. 安卓 发送短信两种方式

    android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: Java代码   //直接调用短信接口发短信 SmsManager smsManager = SmsMan ...

  8. SSM整合之Mybatis笔记( MyBatis获取参数值的两种方式(重要))(P020—P025)

    P20 MyBatis获取参数值的两种方式(重要) 一.什么叫做获取取参数值的两种方式 以后在我们开发是方向B/S系统,然后我们现在要做的任务通过浏览器/页面/视图 收集用户输入的一些数据,然后把这些 ...

  9. Struts2-表单验证的两种方式

    1. Struts2中的输入校验 2. 编码方式校验   1) Action一定要继承自ActionSupport   2) 针对某个要进行校验的请求处理方法编写一个 public void vali ...

最新文章

  1. 字符串操作系列库函数
  2. wxWidgets:OLE 自动化示例
  3. git 忽略 部分文件夹_git设置忽略文件和目录
  4. 【FZU - 1759】Super A^B mod C (数论,快速幂,快速乘,欧拉降幂,指数循环节,模板)
  5. 1-java学习笔记
  6. 【前端】设置好CSS样式动态添加元素会按照样式显示
  7. HCL打开显示当前系统用户怎么解决_鼠标右键新建没有EXCEL 怎么解决?
  8. 第一阶段冲刺阶段项目总结
  9. ubuntu 18.04LTS 安装HP LaserJet 1020(含Plus) 驱动 cups自带驱动不正常的问题解决
  10. CentOS7.5 怎么修改默认SSH端口号
  11. C#解压zip和rar文件
  12. 一张思维导图完成淘宝精细化运营
  13. Jzoj4722 跳楼机
  14. nod-1483-化学变换
  15. 企业局域网即时通讯软件存在是必然趋势
  16. Hacker基础之Linux篇——基础Linux命令二
  17. 从来不是别人的不幸和痛苦
  18. 推荐系统笔记(MAB问题)
  19. Spring Cloud Hystrix 服务容错保护
  20. Unity3D-游戏场景优化之遮挡剔除(Occlusion Culling)的使用

热门文章

  1. Standard C Library - 思维火花 - 博客频道 - CSDN.NET
  2. 滋润万物的173dmba
  3. 听到表扬的飞鸽传书2011
  4. 今天的一条条平坦的即时通讯
  5. 飞鸽传书有关举证不够严谨
  6. 杨元庆:出身中国是联想吸引国际用户的障碍
  7. [视频]中国军事专家论谷歌地球(Google Earth)
  8. 到底什么培训适合你?
  9. 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多,把经历分享给你们!
  10. 光缆弹性模量计算_光缆的制造、种类、施工、选用方法(超全)