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; }