github是https类型的直接去load网址 程序就死了。获取不到相关的东西。
然后 我就大概在网上搜了关于Qt访问https的东西,帖子到时很多,都只是说了大概怎么用。于是就自己照着写了写,本人菜鸟一枚。
主要代码如下:
void Widget::on_pushButton_clicked()
{
const QString strUrl = "https://github.com/Alvin9999/new-pac/wiki/ss%E5%85%8D%E8%B4%B9%E8%B4%A6%E5%8F%B7";
QNetworkAccessManager mManager;
QNetworkRequest request;
request.setUrl(QUrl(strUrl));//加载网页
QSslConfiguration config;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1SslV3);//设置ssl
request.setSslConfiguration(config);
QNetworkReply *reply = mManager.get(request);
QByteArray data;
QEventLoop loop;//启动循环
connect(reply, SIGNAL(finished()),&loop,SLOT(quit()));//读取完成后退出循环
loop.exec();
data = reply->readAll();//接收源码
// qDebug()<<QString(data);
QWebPage UrlPage;
UrlPage.mainFrame()->setHtml(QString(data));
QWebFrame *UrlFrame = UrlPage.currentFrame();
QWebElement doc = UrlFrame->documentElement();
//id="user-content-ss-or-ssr免费账号长期更新"
QWebElement ID = doc.findFirst("#wiki-body");//ID = 过滤节点
QWebElementCollection tmp = ID.findAll("p");
//html不熟,下面的用字符串处理
QStringList strList;
for(int i=0;i<tmp.count();i++)
{
// qDebug()<<i<<" "<<tmp.at(i).toPlainText();
bool ok = tmp.at(i).toPlainText().startsWith("服务器");
if(ok)
{
strList<<tmp.at(i).toPlainText();
}
}
QString strData;
for(int i = 0; i<strList.count();i++)
{
strData+= strList.at(i)+"\n";
}//服务器 各项提取可以用mid json不熟暂时不谢json,直接写文本了。
writeFile(strData);
}
html的doc节点读取还不是很熟练后面就用QString处理了。在后面的提取 用mid配合QStringList就可以提取 或者用正则直接匹配出来。
写文件的代码:
void Widget::writeFile(QString data)
{
QString Path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QString configname = "ss.txt";
QString FilePath = Path+"/"+configname;
QFile file(FilePath);
bool ok = file.open(QIODevice::WriteOnly | QIODevice::Text);
if(!ok)
{
QMessageBox::information(this,"Error","File OPen faild!");
return;
}
QTextStream out(&file);
out<<data.toUtf8()<<endl;
file.close();
ui->pushButton->setText("已输出");
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(close()));
}
本意是要写json的,,还不熟悉json如何操作,就直接写了文本。