目录

背景

演示

java web源码

Qt端源码


背景

因为最近想进一步学习http协议,想从QNetworkAccessManager中,但访问其他网站获取的数据,太过于复杂,不便于个人的实验,在此,本人使用Java搭建了一个get方法的靶场,来学习QNetworkAccessManager的使用

演示

web网站如下:

如果输入了正确的QQ号:

如果输入了错误的QQ号:

在此使用Qt,输入存在的QQ号

再次输入不存在的QQ号:

在此抓一下包:

发送Get请求的封包:

此处的I am fine, fuck you是Qt发送的请求

服务器那边回的包:

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>

Qt端源码

Qt程序结构如下:

widget.ui如下:

源码如下:

NetworkAccessManagerDemo.pro

QT       += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = NetworkAccessManagerDemo
TEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSSOURCES += main.cpp\widget.cppHEADERS  += widget.hFORMS    += 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 replyFinished(QNetworkReply *reply);void netWorkReplyLoadProgress(qint64 received, qint64 total);void deleteNetWorkReply();void httpRead();void submitBtnClicked();private:Ui::Widget *ui;QNetworkAccessManager *m_manager;QNetworkReply *m_netWorkReply;
};#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 <QDebug>
#include <QNetworkReply>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("CSDN IT1995");m_manager = new QNetworkAccessManager(this);connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));connect(ui->submitPushButton, SIGNAL(clicked(bool)), this, SLOT(submitBtnClicked()));
}Widget::~Widget()
{delete ui;
}void Widget::replyFinished(QNetworkReply *reply)
{qDebug() << "replyFinished called!";//qDebug() << "reply->readAll():" << QString::fromUtf8(reply->readAll());//qDebug() << reply->readAll();ui->plainTextEdit->appendHtml(reply->readAll());m_netWorkReply->deleteLater(); //此列子中 m_netWorkReply->deleteLater(); 与 delete m_netWorkReply; 没有什么区别
}void Widget::netWorkReplyLoadProgress(qint64 received, qint64 total)
{//qDebug() << "received:" << received << "  total:" << total;
}void Widget::deleteNetWorkReply()
{qDebug() << "deleteNetWorkReply called!" << endl;
}void Widget::httpRead()
{//qDebug() << m_netWorkReply->readAll();
}void Widget::submitBtnClicked()
{QString qq = ui->QQLineEdit->text();QString url = QString("http://47.101.40.99:8080/GetPostDemo/query.jsp?qq=%1").arg(qq);QNetworkRequest request;request.setUrl(QUrl(url));request.setRawHeader("User-Agent", "I am fine, fuck you");m_netWorkReply = m_manager->get(request);connect(m_netWorkReply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(netWorkReplyLoadProgress(qint64,qint64)));connect(m_netWorkReply, SIGNAL(readyRead()), this, SLOT(httpRead()));
}

C++|Java混合实验-java搭建get方法靶场,Qt发送请求获取数据相关推荐

  1. C++|Java混合实验-java搭建post方法靶场,Qt发送请求获取数据

    目录 背景 演示 Java web源码 Qt源码 背景 post方法使用的地方有多,比如各个Http的API,涉及上传文件等,都是要使用post上传,在此模拟下post的表单上传数据的方式. 演示 首 ...

  2. java后台获取流_java后台发送请求获取数据,并解析json数据

    packagecom.bs.utils;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.Print ...

  3. java main 方法使用 HttpClients发送请求 不打印debug日志

    记录目的:java main 方法使用HttpClients发送请求不打印debug日志 记录背景: 使用java main方法测试接口响应时间 发现问题: 控制台打印巨多debug日志 解决方法: ...

  4. java建立url请求获取数据

    1.新建工具类 package com.hzc.util;import org.apache.commons.lang3.StringUtils; import org.apache.http.Htt ...

  5. apiCloud中api.ajax方法跨域传参获取数据

    apiCloud中的ajax方法,可以自动处理跨域访问数据,不必使用jsonp来处理了. 使用ajax方法,必须要在apiready = function() {}方法中 获取参数 var pageP ...

  6. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...

  7. C++|Java混合实验-Spring Boot获取客户端操作系统,浏览器,Ip等信息,Qt端展示

    目录 概述 演示 源码 概述 这里用Spring Boot控制"/"和"index.html"请求,获取客户端http的信息: Qt端使用QML和C++混合编程 ...

  8. java实现分布式项目搭建的方法

    1 分布式 1.1 什么是分布式 分布式系统一定是由多个节点组成的系统.其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的. 这些连通的节点上部署了我们的节点,并且相互的操作会有协同 ...

  9. 深入理解Java虚拟机之Java类加载机制,Java类实例化过程详解。

    目录 Java类加载机制 类加载过程 加载(Loading) 连接(Linking) 初始化(Initialzation) 使用(Useing) 卸载(Unloading) 引言 什么情况下开始类加载 ...

最新文章

  1. redis-sentinel 主从复制高可用
  2. docker yml mysql_Docker安装Mysql(docker-compose.yml)
  3. 连接阿里云和容器技术生态 - 阿里云开源容器项目汇总
  4. 模拟spring IOC、源码分析
  5. 老司机找BUG指南,赶紧拿走。。
  6. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART IV)
  7. 未找到与约束ContractName,无法打开项目的解决方案
  8. Android 自定义View(二)绘制一个封闭多边形
  9. springmvc一个Controller类处理多个请求被遗弃的方式MultiActionController详解和新的方式
  10. CSS的一些常用知识点
  11. java实现Base64编码与解码
  12. 基于 RK3399 5G 通信和图像增强算法的交通监控系统设计
  13. 飞机大战,坦克大战源码、简单仿记事本、错题本源码及笔记
  14. 域服务器的信息存放在哪,域名服务器上存放着internet主机的
  15. 数据分析需要学习的技能有哪些?
  16. 解决:keeps stopping(停止运行)
  17. 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
  18. 清华大学计算机系女生人数,2013年清华大学在各省市录取人数及男女比例
  19. miui8.5开发者选项USB调试模式
  20. 2.3Linux常用命令

热门文章

  1. Apache Nutch 1.3 学习笔记目录
  2. 求之不得的 Java 文档教程大汇总!
  3. Hadoop技术在商业智能BI中的应用
  4. 帆软发布大数据直连引擎FineDirect,对焦大数据BI
  5. C#2005中如何把unicode编码的数字转化为EBCDIC编码
  6. 那就是我mdash;mdash;大名鼎鼎的C++缪博士
  7. 整个互联网真的是呈现出一种勃勃的生机
  8. 在我还是14岁的时候那会学C++
  9. 给程序员的10条建议,句句经典
  10. 双十一,没有买卖就没有伤害!