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

目录

 

 

背景

演示

java web源码

Qt端源码


 

背景

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

 

演示

web网站如下:

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

如果输入了正确的QQ号:

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

如果输入了错误的QQ号:

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

 

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

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

再次输入不存在的QQ号:

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

 

在此抓一下包:

发送Get请求的封包:

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

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

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

服务器那边回的包:

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

 

java web源码

java源码结构如下:

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

源码如下:

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程序结构如下:

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

widget.ui如下:

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

源码如下:

NetworkAccessManagerDemo.pro

QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = NetworkAccessManagerDemo
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
class QNetworkReply;
QT_END_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    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()));
}