当前位置: 首页 > news >正文

济南seo整站外包wordpress 心情评论插件

济南seo整站外包,wordpress 心情评论插件,创意设计,seo 工具文章目录 前言1. 定义的接口2.connect信号槽3. get4. get 下载文件5. post 总结 前言 /* 1.请求报文#xff1a; 请求报文是由客户端发送给服务器#xff0c;用于请求特定资源或执行特定操作。它由以下几个部分组成#xff1a; 请求行#xff1a;描述了请求的方法、目标资源… 文章目录 前言1. 定义的接口2.connect信号槽3. get4. get 下载文件5. post 总结 前言 /* 1.请求报文 请求报文是由客户端发送给服务器用于请求特定资源或执行特定操作。它由以下几个部分组成 请求行描述了请求的方法、目标资源的路径和HTTP协议的版本通常包含以下三个字段 请求方法指定了客户端希望服务器执行的操作如GET、POST、PUT、DELETE等。 请求目标表示客户端希望访问的资源路径可以是绝对路径或相对路径。协议版本指定所使用的HTTP协议的版本如HTTP/1.1。 请求头包含了关于请求的附加信息格式为键值对。常见的请求头字段包括Host指定请求的目标主机。 User-Agent标识发送请求的客户端应用程序。 Content-Type指定请求正文的类型。 请求正文可选包含客户端发送给服务器的数据通常在使用POST等方法时使用。2.响应报文 响应报文是服务器对客户端请求的回应包含了所请求资源的数据或执行结果。它由以下几个部分组成 状态行描述了响应的状态包含以下三个字段 协议版本指定所使用的HTTP协议的版本如HTTP/1.1。 状态码表示服务器对请求的处理结果如200表示成功404表示资源未找到。 状态信息对状态码进行简短的解释说明。 响应头包含了关于响应的附加信息格式为键值对。常见的响应头字段包括Content-Type指定响应正文的类型。 Content-Length指定响应正文的长度。 Set-Cookie在响应中设置Cookie。 响应正文包含了服务器返回给客户端的数据可以是HTML、JSON、文件等。请求报文和响应报文的结构化文本格式使得客户端和服务器能够互相理解并进行有效的通信。 它们是HTTP通信的基础用于传递请求和响应的相关信息****************************************************** text/html 表示数据格式是 HTML text/css 表示数据格式是 CSS application/javascript 表示数据各式是 JavaScript application/json 表示数据格式是 JSON *******************************************************/ 1. 定义的接口 public公共接口用作单线程public slots公共槽函数支持类对象调用在哪个线程调用即在哪个线程运行signals 信号通过调用信号的方式在其对应槽函数线程创建事件执行用于多线程 public:bool get(QString url, QString data, int timeout 20000);bool post(QString url, QString data, QByteArray jsonData, int timeout 20000);bool getDownload(QString url, QString filePath, int timeout 20000);signals:void sgnGet(QString url, int timeout 20000);void sgnPost(QString url,QByteArray jsonData, int timeout 20000);void sgnGetDownload(QString url, QString filePath, int timeout 20000);void Progress(qint64, qint64);void finished(QString data, bool result);public slots:void gets(QString url, int timeout 20000);void posts(QString url,QByteArray jsonData, int timeout 20000);void getDownloads(QString url, QString filePath, int timeout 20000);2.connect信号槽 connect(this, Http::sgnGet, this, Http::gets);connect(this, Http::sgnGetDownload, this, Http::getDownloads);connect(this, Http::sgnPost, this, Http::posts);3. get //! 通过信号槽的方式调动 void Http::gets(QString url, int timeout) {QString data ;bool rt this-get(url, data, timeout);emit finished(data, rt); }//! get请求数据 bool Http::get(QString url, QString data, int timeout) {qDebug()Http QThread::currentThread() QThread::currentThread();int repeatSend 0;// 三次请求失败结束请求数据while(!repeatGet(url, data, timeout)){if(repeatSend 3) return false;}return true; }//! bool Http::repeatGet(QString url, QString data, int timeout) {// 建立事件循环QEventLoop loop;//设置发送请求所需的信息QNetworkRequest request;request.setUrl(QUrl(url));request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(application/x-www-form-urlencoded));//管理网络请求和响应QNetworkAccessManager manager;connect(manager, QNetworkAccessManager::finished, loop, QEventLoop::quit);// 超时检测QTimer timer;timer.setSingleShot(true);connect(timer, QTimer::timeout, loop, QEventLoop::quit);// 处理网络请求的响应数据QNetworkReply* pReply manager.get(request);connect(pReply, QNetworkReply::finished, loop, QEventLoop::quit);connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), loop, SLOT(quit()));// 超时检测定时器启动timer.start((timeout 0) ? timeout : 2000);//执行事件循环直到退出循环再执行后面代码loop.exec();//! 退出事件循环判断定时器是否触发触发即超时if(!timer.isActive()){pReply-deleteLater();return false;}//! 未超时停止定时器timer.stop();//QNetworkReply::NetworkError err pReply-error();if(err ! QNetworkReply::NoError){// 检测状态码int statusCode pReply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();qDebug()get error, statusCode statusCode;return false;}//data QString::fromUtf8(pReply-readAll());pReply-deleteLater();return true; }执行代码 QString data ; qDebug()----------------------------------; qDebug() MainWindow QThread::currentThread() QThread::currentThread(); qDebug()data.size(); data.clear(); qDebug()--------------- 1 ----------------; http-get(QString(http://www.baidu.com),data, 2000); qDebug()data.size(); data.clear(); qDebug()--------------- 2 ----------------; http-gets(QString(http://www.baidu.com), 2000); qDebug()data.size(); data.clear(); qDebug()--------------- 3 ----------------; emit http-sgnGet(QString(http://www.baidu.com), 2000); qDebug()data.size(); qDebug()----------------------------------; // 保存HTTP响应内容 // 组装保存的文件名 文件名格式 路径/年_月_日 小时_分_秒 httpfile.html QDateTime current_date_time QDateTime::currentDateTime(); QString current_date current_date_time.toString(yyyy_MM_dd hh_mm_ss); QString filePath .; QString fileName filePath / current_date httpfile .html;QFile file(fileName); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)){//qDebug() file open error!;return ; } QTextStream out(file); out.setCodec(UTF-8); outdata; file.close(); data.clear();通过信号槽是多线程且异步的 4. get 下载文件 void Http::getDownloads(QString url, QString filePath, int timeout) {bool rt this-getDownload(url, filePath, timeout);emit finished(filePath, rt); }bool Http::getDownload(QString url, QString filePath, int timeout) {qDebug()Http QThread::currentThread() QThread::currentThread();int repeatSend 0;//while(!repeatGetDownload(url, filePath, timeout)){if(repeatSend 3) return false;}return true; }bool Http::repeatGetDownload(QString url, const QString filePath, const int timeout) {if(!pFile.isOpen()) pFile.setFileName(filePath);//QEventLoop loop;//QNetworkRequest request;request.setUrl(QUrl(url));//QNetworkAccessManager manager;connect(manager, QNetworkAccessManager::finished, loop, QEventLoop::quit);//QTimer timer;timer.setSingleShot(true);connect(timer, QTimer::timeout, loop, QEventLoop::quit);//QNetworkReply* pReply manager.get(request);connect(pReply, QNetworkReply::finished, loop, QEventLoop::quit);connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), loop, SLOT(quit()));connect(pReply, QNetworkReply::readyRead, loop, QEventLoop::quit);//timer.start((timeout 0) ? timeout : 20000);loop.exec(QEventLoop::ExcludeSocketNotifiers);disconnect(pReply, QNetworkReply::readyRead, loop, QEventLoop::quit);//! 超时if(!timer.isActive()){pReply-deleteLater();return false;}else{timer.stop();}QNetworkReply::NetworkError err pReply-error();if(err ! QNetworkReply::NoError){// 检测状态码int statusCode pReply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();qDebug()get error, statusCode statusCode;//! 重定向const QVariant redirectionTarget pReply-attribute(QNetworkRequest::RedirectionTargetAttribute);if(!redirectionTarget.isNull()){QUrl redirectedUrl redirectionTarget.toUrl();url redirectedUrl.toString();}return false;}connect(pReply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(LoadProgress(qint64,qint64)));connect(pReply, QNetworkReply::readyRead, this, Http::readSave);loop.exec();return true; }void Http::readSave() {QNetworkReply* pReply (QNetworkReply*)sender();if(!pFile.isOpen()){//! save fileif(!pFile.open(QIODevice::WriteOnly)){qDebug() pFile.errorString();}}pFile.write(pReply-readAll()); }void Http::LoadProgress(qint64 recved, qint64 total) {QNetworkReply* pReply (QNetworkReply*)sender();if(recved total){pFile.close();pReply-deleteLater();} }执行代码 QString url https://1.as.dl.wireshark.org/win64/Wireshark-win64-4.0.10.exe; url https://enigmaprotector.com/assets/files/enigma_en_demo.exe;qDebug()----------------------------------; qDebug() MainWindow QThread::currentThread() QThread::currentThread(); qDebug()--------------- 1 ----------------; QString path ./enigma1.exe; //http-getDownload(url, path, 4000); qDebug()--------------- 2 ----------------; path ./enigma2.exe; //http-getDownloads(url, path, 4000); qDebug()--------------- 3 ----------------; path ./enigma3.exe; emit http-sgnGetDownload(url, path, 4000); qDebug()----------------------------------;5. post 没测试过 void Http::posts(QString url,QByteArray jsonData, int timeout) {QString data;bool rt this-post(url, data, jsonData, timeout);emit finished(data, rt); }//! bool Http::post(QString url, QString data, QByteArray jsonData, int timeout) {int repeatSend 0;//while(!repeatPost(url, data, jsonData, timeout)){repeatSend;if(repeatSend 3)return false;}return true; }// bool Http::repeatPost(QString url, QString data, QByteArray jsonData, int timeout) {//QEventLoop loop;//QNetworkRequest request;request.setUrl(QUrl(url));request.setHeader(QNetworkRequest::ContentTypeHeader, text/xml;charsetUTF-8);//QNetworkAccessManager manager;connect(manager, QNetworkAccessManager::finished, loop, QEventLoop::quit);//QTimer timer;timer.setSingleShot(true);connect(timer, QTimer::timeout, loop, QEventLoop::quit);//QNetworkReply* pReply manager.post(request, jsonData);connect(pReply, QNetworkReply::finished, loop, QEventLoop::quit);connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), loop, SLOT(quit()));//timer.start((timeout 0) ? timeout : 2000);loop.exec();//! 超时if(!timer.isActive()){pReply-deleteLater();return false;}//!timer.stop();//QNetworkReply::NetworkError err pReply-error();if(err ! QNetworkReply::NoError){//! 检测状态码int statusCode pReply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();qDebug()get error, statusCode statusCode;//! 重定向const QVariant redirectionTarget pReply-attribute(QNetworkRequest::RedirectionTargetAttribute);if(!redirectionTarget.isNull()){QUrl redirectedUrl redirectionTarget.toUrl();url redirectedUrl.toString();}return false;}//!data QString::fromUtf8(pReply-readAll());pReply-deleteLater();return true; }总结 学啥记啥好记性不如烂笔头
http://wiki.neutronadmin.com/news/51504/

相关文章:

  • 一个网站可以做几级链接邯郸怎样做网站
  • 小伙做网站怎么制作公众号教程
  • 做网站服务器是必须购买的吗会展设计专业学什么
  • 写作网站哪个好用网页制作公司印章
  • 备案网站打不开什么建站公司好
  • 做番号网站犯法吗天津最新紧急通知
  • 如何用框架做网站天津最好的网站建设公司
  • 网站宣传平台抢购网站源码
  • seo网站优化价格做网站用突发性实例可以吗
  • 微网站预约网站开发网站运行平台包括
  • 网站改版注意事项直播网站开发需要多少钱
  • 网站搜索引擎优化诊断官方网站aspcms
  • 律师事务所网站建设策划方案百度云网盘登录入口
  • 华为商城的网站建设官网网站建设需求文档
  • 手机网站开发模拟手机房地产互联网推广
  • 网站设计好了如何上传到自己搭建的网上去深圳做微信商城网站
  • 那种系统做网站比较好美轮美奂的网站建设
  • 动易论坛官方网站无锡网站搜索引擎优化
  • 做外贸门户网站wordpress长文档分页
  • 网站开发客户需求文档营销助手下载app下载
  • 建设网站企业邮箱dede网站地图模板文件
  • 优秀的国外设计网站营销型网站建设0469z
  • win11优化大师网站如何seo
  • 网站如何报备软件开发定制价格表
  • wordpress数据库删除seo如何提高网站排名
  • 网龙公司有做网站吗wordpress基础安装
  • 网站怎么备案在哪里橱柜手机网站模板
  • 制作asp手机网站东莞seo优化指南
  • 河北建设工程信息网官方网站高要市建设局网站
  • 东菀高端网站建设博客模板wordpress