目录
基本概念
HTTP协议头中的Referer主要是用来让服务器判断来源页面,即用户是从那个页面来的。网站通常用其来统计用户来源,看用户是从搜索页面来的,还是从其他网站链接来的。或者是从书签等访问,以便合理的定位网站。
Referer有时候也做防盗链处理,即下载时判断来源地址是不是在网站的域名内,否则不能下载或显示,以天涯网为例!
如,直接请求某一图片:
此时他判断是是referer,如果referer不对(这个主要是看程序员怎么写的),服务器那边会会302重定向。
如果是浏览器接收到302的重定向,就肯定会访问Location:后面的链接
如果Referer正确,即可得到对应的图片,这里用Qt来实现下
代码与实例
没有refere时是获取不到图片的
Fidder抓包如下:
有referer后:
看看图片:
源码如下:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#include <QDebug>
#include <QSslConfiguration>
#include <QEventLoop>
#include <QNetworkRequest>
#include <QFile>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkAccessManager *manager = new QNetworkAccessManager;
QNetworkRequest *request = new QNetworkRequest;
QSslConfiguration config;
QSslConfiguration conf = request->sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::TlsV1SslV3);
request->setSslConfiguration(conf);
request->setUrl(QUrl("http://img3.laibafile.cn/p/m/280148719.png"));
request->setRawHeader("referer", "http://www.tianya.cn");
QNetworkReply *reply = manager->get(*request);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QFile file("hehe.png");
if(!file.open(QIODevice::WriteOnly)){
qDebug() << "hehe文件有毒,快跑!";
return 0;
}
file.write(reply->readAll());
file.close();
delete request;
delete manager;
qDebug() << "完成,可以关了~!";
return a.exec();
}