qt 網絡庫使用介紹c++
在.pro文件中,要手動添加network模塊:QT += network瀏覽器
QNetworkAccessManager: 發送get或者post請求。服務器
用get方法或者post方法發送get/post請求微信
參數是QNetworkRequest,返回值是QNetworkReply網絡
QNetworkRequest:包裝請求信息post
用setHeader方法設置請求的header學習
用setUrl方法設置服務器的IP和端口ui
QNetworkReply:包裝接服務器返回的信息。this
注意,用rep->readAll();獲得返回的數據;用rep->readAll(key);獲得返回的header信息url
一個小例子,給百度發一個get請求。
注意事項:
1,設置http請求頭UserAgent,目的是假裝成瀏覽器的發送的http請求。
2,調用get方法後,在等待服務器的返回的過程當中,get方法或者post方法是不阻塞的,調用後當即返回。
3,由於get/post方法不阻塞,那怎麼才能知道服務器何時處理完,返回給客戶端呢,監聽QNetworkReply裏的&QNetworkReply::readyRead信號。
4,qDebug() << 2222;會先於qDebug() << data;被打印出來。緣由是get方法不阻塞。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QNetworkAccessManager* mgr = new QNetworkAccessManager(this); QString agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"; QNetworkRequest res; //設置http請求頭UserAgent,目的是假裝成瀏覽器的發送的http請求 res.setHeader(QNetworkRequest::UserAgentHeader, agent); //設置URL //res.setUrl(QUrl("http://www.baidu.com:80")); res.setUrl(QUrl("http://10.210.65.129:80")); //發送http請求,返回的結果放到rep裏。 //QNetworkReply* rep = mgr->post(res, ""); QNetworkReply* rep = mgr->get(res); //讀服務器返回的數據 connect(rep, &QNetworkReply::readyRead, this, [=](){ //取得服務器回發的header數據 QVariant url = rep->header(QNetworkRequest::LocationHeader); //服務器回發的數據,但不包括頭,頭的信息在header裏。 QByteArray data = rep->readAll(); qDebug() << data; qDebug() << url.toString(); }); qDebug() << 2222; }