C++|Java混合实验-java搭建get方法靶场,Qt发送请求获取数据
目录
背景
演示
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发送请求获取数据相关推荐
- C++|Java混合实验-java搭建post方法靶场,Qt发送请求获取数据
目录 背景 演示 Java web源码 Qt源码 背景 post方法使用的地方有多,比如各个Http的API,涉及上传文件等,都是要使用post上传,在此模拟下post的表单上传数据的方式. 演示 首 ...
- java后台获取流_java后台发送请求获取数据,并解析json数据
packagecom.bs.utils;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.Print ...
- java main 方法使用 HttpClients发送请求 不打印debug日志
记录目的:java main 方法使用HttpClients发送请求不打印debug日志 记录背景: 使用java main方法测试接口响应时间 发现问题: 控制台打印巨多debug日志 解决方法: ...
- java建立url请求获取数据
1.新建工具类 package com.hzc.util;import org.apache.commons.lang3.StringUtils; import org.apache.http.Htt ...
- apiCloud中api.ajax方法跨域传参获取数据
apiCloud中的ajax方法,可以自动处理跨域访问数据,不必使用jsonp来处理了. 使用ajax方法,必须要在apiready = function() {}方法中 获取参数 var pageP ...
- 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...
- C++|Java混合实验-Spring Boot获取客户端操作系统,浏览器,Ip等信息,Qt端展示
目录 概述 演示 源码 概述 这里用Spring Boot控制"/"和"index.html"请求,获取客户端http的信息: Qt端使用QML和C++混合编程 ...
- java实现分布式项目搭建的方法
1 分布式 1.1 什么是分布式 分布式系统一定是由多个节点组成的系统.其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的. 这些连通的节点上部署了我们的节点,并且相互的操作会有协同 ...
- 深入理解Java虚拟机之Java类加载机制,Java类实例化过程详解。
目录 Java类加载机制 类加载过程 加载(Loading) 连接(Linking) 初始化(Initialzation) 使用(Useing) 卸载(Unloading) 引言 什么情况下开始类加载 ...
最新文章
- redis-sentinel 主从复制高可用
- docker yml mysql_Docker安装Mysql(docker-compose.yml)
- 连接阿里云和容器技术生态 - 阿里云开源容器项目汇总
- 模拟spring IOC、源码分析
- 老司机找BUG指南,赶紧拿走。。
- 【论文】Awesome Relation Extraction Paper(关系抽取)(PART IV)
- 未找到与约束ContractName,无法打开项目的解决方案
- Android 自定义View(二)绘制一个封闭多边形
- springmvc一个Controller类处理多个请求被遗弃的方式MultiActionController详解和新的方式
- CSS的一些常用知识点
- java实现Base64编码与解码
- 基于 RK3399 5G 通信和图像增强算法的交通监控系统设计
- 飞机大战,坦克大战源码、简单仿记事本、错题本源码及笔记
- 域服务器的信息存放在哪,域名服务器上存放着internet主机的
- 数据分析需要学习的技能有哪些?
- 解决:keeps stopping(停止运行)
- 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
- 清华大学计算机系女生人数,2013年清华大学在各省市录取人数及男女比例
- miui8.5开发者选项USB调试模式
- 2.3Linux常用命令