目录

 

 

使用工具分析

C++|Qt模拟工具分析


 

使用工具分析

这里使用Fidder工具,网站使用天涯网,来研究下302暂时重定向和User-Agent相关的知识。

首先打开Fidder,直接访问天涯网,看下访问的原始报文请求和响应:

从中可以看到请求头中,包含User-Agent,这个包含了目前我的浏览器和操作系统的信息。这是http包头的的一部分。

看下响应,200 ok,并且可以知道天涯采用的是nginx,机密使用的gzip。

这里,如果改变下User-Agent会发生如下事情

 

随后再次访问:

可以得知User-Agent被换成了ipone6的,因此天涯后台就根据这个User-Agent就发送302响应,新的地址Location为 https://www.tianya.cn/m/,这里要注意,有些网站并不是靠User-Agent看,有些是靠这个,这个得看他后台是怎么写的。

得到302后浏览器,会自动访问Location的地址:

这里我们也可以看到Access-Control-Allow的游戏东西,感觉天涯网暴露得有点太多了!

 

 

C++|Qt模拟工具分析

下面使用C++语言,Qt框架访问天涯网,并且看看设置了User-Agent和不设置带来的区别。

没设置User-Agent后,正常访问天涯网,下面是设置了User-Agent后,服务器会302的包!

程序结构如下:

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QNetworkReply>

QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
QT_END_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

protected slots:
    void onFinished();
    void error(QNetworkReply::NetworkError error);
    void btnClicked();

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 <QSslConfiguration>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QDebug>
#include <QUrl>
#include <QNetworkAccessManager>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    m_manager = new QNetworkAccessManager(this);
    QNetworkRequest *request = new QNetworkRequest();

    QSslConfiguration config;
    QSslConfiguration conf = request->sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1SslV3);
    request->setSslConfiguration(conf);

    request->setUrl(QUrl("https://bbs.tianya.cn/"));
    request->setRawHeader("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4");
    QNetworkReply *reply = m_manager->get(*request);

    //qDebug() << request->r
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));
    connect(reply , SIGNAL(finished()) , this , SLOT(onFinished()));
    connect(reply , SIGNAL(error(QNetworkReply::NetworkError)) , this , SLOT(error(QNetworkReply::NetworkError)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onFinished()
{
    qDebug() << "---------- 华丽的分割线 ----------";
    QNetworkReply *r = static_cast<QNetworkReply*>(QObject::sender());
    qDebug() << r->rawHeaderPairs();
    qDebug() << "---------- 华丽的分割线 ----------";
    qDebug() << QString::fromUtf8(r->readAll().left(10240));
}

void Widget::error(QNetworkReply::NetworkError error)
{

}

void Widget::btnClicked()
{
    qDebug() << "呵呵哒";
}

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建,欢迎商务合作。wx: diudiu5555

更多推荐