Qt实践|HTTPS知识点-SSL socket获取百度首页
生活随笔
收集整理的這篇文章主要介紹了
Qt实践|HTTPS知识点-SSL socket获取百度首页
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?
基本概念
代碼與實(shí)例
?
基本概念
這里要明確一點(diǎn),HTTP/HTTPS是應(yīng)用層協(xié)議,而socket一般指TCP/UDP協(xié)議,也就是在傳輸層中,而IP協(xié)議是在網(wǎng)絡(luò)層中!
這個實(shí)例主要是擼socket,然后手動構(gòu)造HTTP包,完成應(yīng)用層的功能。
這里使用了C++中的Qt框架
?
?
代碼與實(shí)例
程序運(yùn)行截圖如下:
源碼如下:
#include <QCoreApplication> #include <QSslSocket> #include <QObject> #include <QDebug> #include <QEventLoop>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QSslSocket *socket = new QSslSocket;socket->connectToHostEncrypted("www.baidu.com", 443);QEventLoop loop;QObject::connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit()));loop.exec();QObject::connect(socket, &QSslSocket::stateChanged, [=](){qDebug() << "ssl socket斷了,這個網(wǎng)站有毒!快跑!";});socket->write("GET https://www.baidu.com/ HTTP/1.1\r\n""Host: www.baidu.com\r\n""User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n""Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n""Accept-Encoding: deflate, br\r\n""Cookie: BAIDUID=AFAC3106555A50E243924D01EB575871:FG=1; BIDUPSID=0770F8E70DCC708B09D0A4EB13FA4EA9; PSTM=1566473759; BD_UPN=13314352; COOKIE_SESSION=7_1_5_1_2_3_0_1_4_1_0_3_2196_0_89_0_1566912600_1566910408_1566912511%7C9%231980_13_1566912293%7C6; delPer=0; BD_HOME=0; H_PS_PSSID=1461_21120_29523_29518_29099_29567_29221_29072\r\n""Connection: keep-alive\r\n""Upgrade-Insecure-Requests: 1\r\n""\r\n");QObject::connect(socket, SIGNAL(readyRead()), &loop, SLOT(quit()));loop.exec();qDebug() << QString::fromUtf8(socket->readAll());delete socket;qDebug() << "over!";return a.exec(); }這里要注意HTTP中的Accept-Encoding頭中不要加gzip,不然收到的包是被壓縮的,還要用壓縮軟件解壓。
總結(jié)
以上是生活随笔為你收集整理的Qt实践|HTTPS知识点-SSL socket获取百度首页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统架构师学习笔记-软件架构设计
- 下一篇: Qt文档阅读笔记|Qt实践| HTTPS