Qt实践| HTTP知识点-User-Agent及302暂时重定向实践
目录使用工具分析C++|Qt模拟工具分析使用工具分析这里使用Fidder工具,网站使用天涯网,来研究下302暂时重定向和User-Agent相关的知识。首先打开Fidder,直接访问天涯网,看下访问的原始报文请求和响应:从中可以看到请求头中,包含User-Agent,这个包含了目前我的浏览器和操作系统的信息。这是http包头的的一部分。看下响应,2...
目录
使用工具分析
这里使用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() << "呵呵哒";
}
更多推荐
所有评论(0)