Qt之小项目实战----刷csdn访问量工具

举报
鱼酱 发表于 2022/01/06 22:36:50 2022/01/06
【摘要】 一、设计 使用QT5.8 +QT creater 使用这两个累       QNetworkReply       QNetworkAccessManager      &...

一、设计

使用QT5.8 +QT creater

使用这两个累

      QNetworkReply

      QNetworkAccessManager

       1.定义访问的文章

       2.模拟浏览器发送请求


二、核心编码



  
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QtNetwork/QNetworkAccessManager>
  5. #include <QtNetwork/QNetworkReply>
  6. #include <QtNetwork/QNetworkRequest>
  7. #include <QTimer>
  8. #include <QSslConfiguration>
  9. #include <QString>
  10. namespace Ui {
  11. class MainWindow;
  12. }
  13. class MainWindow : public QMainWindow
  14. {
  15. Q_OBJECT
  16. public:
  17. explicit MainWindow(QWidget *parent = 0);
  18. ~MainWindow();
  19. public slots:
  20. void slot_requestFinished();
  21. void on_pushButton_clicked();
  22. void slot_requestTimeout();
  23. signals:
  24. void signal_requestFinished(bool bSuccess,const QString& strResult); //http请求结束
  25. private:
  26. Ui::MainWindow *ui;
  27. QNetworkAccessManager* m_pNetworkManager;//网络管理类
  28. QNetworkReply* m_pNetworkReply; //封装请求返回信息
  29. QTimer* m_pTimer; //请求超时计时器
  30. QString m_strUrl; //记录当前请求的url
  31. };
  32. #endif // MAINWINDOW_H




 


  
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QTextCodec>
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. m_pNetworkReply = NULL;
  10. m_pTimer = new QTimer(this);
  11. connect(m_pTimer,SIGNAL(timeout()),this,SLOT(slot_requestTimeout()));//超时信号
  12. }
  13. MainWindow::~MainWindow()
  14. {
  15. delete ui;
  16. }
  17. const int nHTTP_TIME = 3000; //10秒
  18. void MainWindow::on_pushButton_clicked()
  19. {
  20. m_pTimer->start(3000);
  21. m_pNetworkManager = new QNetworkAccessManager(this);
  22. QString strUrl = "http://blog.csdn.net/hiwoshixiaoyu/article/details/72763130";
  23. QNetworkRequest netRequest;
  24. netRequest.setRawHeader("Accept","*/*");
  25. netRequest.setRawHeader("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
  26. netRequest.setUrl(QUrl(strUrl)); //地址信息
  27. if(strUrl.toLower().startsWith("https"))//libeay32.dll和ssleay32.dll
  28. {
  29. QSslConfiguration sslConfig;
  30. sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
  31. sslConfig.setProtocol(QSsl::TlsV1_1);
  32. netRequest.setSslConfiguration(sslConfig);
  33. }
  34. m_pNetworkManager->clearAccessCache();
  35. m_pNetworkReply = m_pNetworkManager->get(netRequest); //发起get请求
  36. connect(m_pNetworkReply,SIGNAL(finished()),this,SLOT(slot_requestFinished())); //请求完成信号
  37. m_pTimer->start(nHTTP_TIME);
  38. }
  39. #include <windows.h>
  40. void MainWindow::slot_requestFinished()
  41. {
  42. m_pTimer->stop();//关闭定时器
  43. QByteArray resultContent = m_pNetworkReply->readAll();
  44. QTextCodec* pCodec = QTextCodec::codecForName("UTF-8");
  45. QString strResult = pCodec->toUnicode(resultContent);
  46. int nHttpCode = m_pNetworkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();//http返回码
  47. QString qStrDest1 = "访问:";
  48. QString qStrDest2 = "</span>";
  49. if(nHttpCode == 200)//成功
  50. {
  51. int pos1 = strResult.indexOf(qStrDest1);
  52. QString temp = strResult.mid(pos1,200);
  53. int pos2 = temp.indexOf(qStrDest2)+qStrDest2.length();
  54. QString temp2 = temp.left(pos2);
  55. ui->m_RequestNum->setText(temp2);
  56. emit signal_requestFinished(true,strResult);//请求失败
  57. }
  58. else
  59. {
  60. emit signal_requestFinished(false,strResult);//请求失败
  61. }
  62. m_pNetworkReply->deleteLater();
  63. Sleep(1000);
  64. on_pushButton_clicked();
  65. }
  66. //请求超时
  67. void MainWindow::slot_requestTimeout()
  68. {
  69. emit signal_requestFinished(false,"timeout");//请求失败
  70. m_pNetworkReply->deleteLater();
  71. }



三、总结


  1.工具源码下载地址。

     http://download.csdn.net/detail/hiwoshixiaoyu/9857560

  2.后续推出一个起线程的版本,防止总卡死的问题。

 


文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。

原文链接:yujiang.blog.csdn.net/article/details/72830694

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。