Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "beeliner.h"
- #include "ui_beeliner.h"
- //#include "ui_phones.h"
- #include <QtGui>
- BeelinerThread::BeelinerThread(QObject *parent) :
- QThread(parent)
- {
- //qDebug() << "BeelinerThread::BeelinerThread()" << QObject::thread();
- }
- BeelinerThread::~BeelinerThread()
- {
- //qDebug() << "BeelinerThread::~BeelinerThread()" << QObject::thread();
- //wait();
- //deleteLater();
- }
- void BeelinerThread::run()
- {
- //qDebug() << "Thread" << iter << QObject::thread();
- QMutex mutex;
- QString fileErrors = QDir::currentPath() + "/errors.txt";
- QElapsedTimer timer;
- timer.start();
- QString phone = phonesForParsing[iter];
- QNetworkAccessManager qnam;
- qnam.setCookieJar(new QNetworkCookieJar());
- //qDebug() << &qnam << "start" << iter;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////// Вход на сайт
- QNetworkRequest request;
- request.setRawHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
- request.setUrl(QUrl("https://uslugi.beeline.ru/"));
- QNetworkReply *reply = qnam.get(request);
- QEventLoop loop;
- connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- reply->deleteLater();
- if(reply->error() != QNetworkReply::NoError) {
- mutex.lock();
- writeError(fileErrors, reply->errorString() + " getCookies " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- mutex.unlock();
- }
- QString answer = QString::fromLocal8Bit(reply->readAll());
- QRegExp rx("<form name=\"EcareLoginForm\" method=\"post\" action=\"(.+)\"");
- rx.setMinimal(true);
- rx.indexIn(answer);
- QString sessionId = rx.cap(1);
- QUrl url = QVariant("https://uslugi.beeline.ru" + sessionId).toUrl();
- //////////////////////////////////////////////////// Login & Password ////////////////////////////////////////////////////////////////
- QRegExp rxLogin("^(.+):(.+):");
- rxLogin.setMinimal(true);
- rxLogin.indexIn(phone);
- QString login = rxLogin.cap(1);
- QByteArray password = QTextCodec::codecForName("Windows-1251")->fromUnicode(rxLogin.cap(2)).toPercentEncoding();
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- QString PostParams = "_stateParam=eCareLocale.currentLocale%3Dru_RU__Russian&_forwardName=null&_resetBreadCrumbs=false&_expandStatus=&userName=" + login + "&password=" + password + "&ecareAction=login";
- QByteArray PostData = PostParams.toUtf8();
- //////////////////////////////////////////////////////////////////////////////////////////////////////////// Авторизация
- request.setUrl(url);
- reply = qnam.post(request, PostData);
- connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- reply->deleteLater();
- if(reply->error() != QNetworkReply::NoError) {
- mutex.lock();
- writeError(fileErrors, reply->errorString() + " authorization " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- mutex.unlock();
- }
- answer = QString::fromLocal8Bit(reply->readAll());
- if (answer.contains("Неправильный логин или пароль")) {
- mutex.lock();
- qint64 res = timer.elapsed();
- qint64 sec = res / 1000;
- qint64 min = sec / 60;
- qint64 hr = min / 60;
- sec %= 60;
- min %= 60;
- QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- model->insertRow(0);
- model->setData(model->index(0, 0), phone);
- model->setData(model->index(0, 1), QColor(Qt::red), Qt::ForegroundRole);
- model->setData(model->index(0, 1), "Неправильный логин или пароль");
- model->setData(model->index(0, 2), timeElapsed);
- mutex.unlock();
- return;
- } else if (answer.contains("Доступ к системе заблокирован")) {
- mutex.lock();
- qint64 res = timer.elapsed();
- qint64 sec = res / 1000;
- qint64 min = sec / 60;
- qint64 hr = min / 60;
- sec %= 60;
- min %= 60;
- QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- model->insertRow(0);
- model->setData(model->index(0, 0), phone);
- model->setData(model->index(0, 1), QColor(Qt::red), Qt::ForegroundRole);
- model->setData(model->index(0, 1), "Доступ к системе заблокирован");
- model->setData(model->index(0, 2), timeElapsed);
- mutex.unlock();
- return;
- } else {
- QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
- //////////////////////////////////////////////////////////////////////////////////////////////////////////// Редирект
- request.setUrl(redirectUrl);
- reply = qnam.get(request);
- connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- reply->deleteLater();
- }
- if(reply->error() != QNetworkReply::NoError) {
- mutex.lock();
- writeError(fileErrors, reply->errorString() + " redirect " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- mutex.unlock();
- }
- answer = QString::fromLocal8Bit(reply->readAll());
- if (answer.contains("Система временно недоступна")) {
- mutex.lock();
- qint64 res = timer.elapsed();
- qint64 sec = res / 1000;
- qint64 min = sec / 60;
- qint64 hr = min / 60;
- sec %= 60;
- min %= 60;
- QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- model->insertRow(0);
- model->setData(model->index(0, 0), phone);
- model->setData(model->index(0, 1), QColor(Qt::red), Qt::ForegroundRole);
- model->setData(model->index(0, 1), "Система временно недоступна");
- model->setData(model->index(0, 2), timeElapsed);
- mutex.unlock();
- return;
- } else {
- //////////////////////////////////////////////////////////////////////////////////////////////////////////// Получение баланса (1 способ)
- request.setUrl(QUrl("https://uslugi.beeline.ru/vip/prepaid/refreshedPrepaidBalance.jsp"));
- reply = qnam.get(request);
- connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- reply->deleteLater();
- if(reply->error() != QNetworkReply::NoError) {
- mutex.lock();
- writeError(fileErrors, reply->errorString() + " redirect " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- mutex.unlock();
- }
- answer = QString::fromLocal8Bit(reply->readAll());
- QRegExp rxBalanseFast("<td class=\"tabred\">.+([0-9,]+) ");
- rxBalanseFast.setMinimal(true);
- rxBalanseFast.indexIn(answer);
- QString balanseFastStr = rxBalanseFast.cap(1);
- //qDebug() << balanseFastStr << iter;
- //qDebug() << "fail count: " << failCount << iter;
- if (balanseFastStr.isEmpty()) {
- if (failCount < 3) {
- failCount++;
- run();
- } else {
- mutex.lock();
- qint64 res = timer.elapsed();
- qint64 sec = res / 1000;
- qint64 min = sec / 60;
- qint64 hr = min / 60;
- sec %= 60;
- min %= 60;
- QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- model->insertRow(0);
- model->setData(model->index(0, 0), phone);
- model->setData(model->index(0, 1), QColor(Qt::red), Qt::ForegroundRole);
- model->setData(model->index(0, 1), "Не удалось спарсить баланс");
- model->setData(model->index(0, 2), timeElapsed);
- mutex.unlock();
- }
- } else {
- mutex.lock();
- double balanseFast = balanseFastStr.toDouble();
- qint64 res = timer.elapsed();
- qint64 sec = res / 1000;
- qint64 min = sec / 60;
- qint64 hr = min / 60;
- sec %= 60;
- min %= 60;
- QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- //QString timeElapsed; QTextStream(&timeElapsed) << hr << ":" << min << ":" << sec;
- model->insertRow(0);
- model->setData(model->index(0, 0), phone);
- QColor color;
- if (balanseFast < 10) {
- color = Qt::red;
- } else if (balanseFast > 10 && balanseFast < 50) {
- color = Qt::darkRed;
- } else if (balanseFast > 50 && balanseFast < 100) {
- color = Qt::darkBlue;
- } else {
- color = Qt::darkGreen;
- }
- model->setData(model->index(0, 1), QColor(color), Qt::ForegroundRole);
- model->setData(model->index(0, 1), balanseFast);
- model->setData(model->index(0, 2), timeElapsed);
- mutex.unlock();
- //qDebug() << phone << balanse << "end";
- //exec();
- //qDebug() << "BeelinerThread::run() end";
- }
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // if(reply->error() != QNetworkReply::NoError) {
- // mutex.lock();
- // writeError(fileErrors, reply->errorString() + " redirect " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- // mutex.unlock();
- // }
- // answer = QString::fromLocal8Bit(reply->readAll());
- // if (answer.contains("Система временно недоступна")) {
- // mutex.lock();
- // qint64 res = timer.elapsed();
- // qint64 sec = res / 1000;
- // qint64 min = sec / 60;
- // qint64 hr = min / 60;
- // sec %= 60;
- // min %= 60;
- // QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- // model->insertRow(0);
- // model->setData(model->index(0, 0), phone);
- // model->setData(model->index(0, 1), QColor(Qt::red), Qt::ForegroundRole);
- // model->setData(model->index(0, 1), "Система временно недоступна");
- // model->setData(model->index(0, 2), timeElapsed);
- // mutex.unlock();
- // return;
- // } else {
- // QRegExp rx("effectiveDate=([^;]+);");
- // rx.setMinimal(true);
- // rx.indexIn(answer);
- // QString timestamp = rx.cap(1);
- // QString PostParams = "_navigation_secondaryMenu=PrepaidCTN.prepaidFinancialInfo&_resetBreadCrumbs=true&_stateParam=Reports.isNoneHierarchy%3Dfalse%3BnodeTypeNs%3Anull.pointLogicalId%3DCR_30%3BbreadCrumbs.breadCrumbDO1%3D0_%3BhierarchyTree%3AorgRepl.pointLogicalId%3D0%3BUsabilityNS%3Anull.pointLogicalId%3DnewUsability%3BTree%3AbillRepl.selected%3D0%3Bmulti-level%3Amenu.pointLogicalId%3D41%3BbreadCrumbs.breadCrumbsSize%3D1%3BeCareLocale.currentLocale%3Dru_RU__Russian%3BEntryNodes%3Areplica1.pointLogicalId%3D0%3BTree%3AorgRepl.selected%3D0%3BhierarchyTree%3AorgRepl.effectiveDate%3D" + timestamp + "%3BhierarchyTree%3AbillRepl.pointLogicalId%3D0%3BTree%3AorgRepl.treeExpandedList%3D3_%3BTree%3AbillRepl.treeExpandedList%3D4_%3BbackendSource%3Absource.backendsSourceName%3DENS%3Bhierarchies%3AhierarchiesRepl1.pointLogicalId%3D0&_expandStatus=";
- // QByteArray PostData = PostParams.toUtf8();
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////// Получение баланса (2 способ)
- // request.setUrl(QUrl("https://uslugi.beeline.ru/VIPLoadPrepaidCtnFinancialInfoAction.do"));
- // reply = qnam.post(request, PostData);
- // connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- // loop.exec();
- // reply->deleteLater();
- // }
- // if(reply->error() != QNetworkReply::NoError) {
- // mutex.lock();
- // writeError(fileErrors, reply->errorString() + " financialInformation " + phone + QDateTime::currentDateTime().toString(" dd.MM.yy H:mm:ss"));
- // mutex.unlock();
- // }
- // answer = QString::fromLocal8Bit(reply->readAll());
- // QRegExp rxParsingBalanse("<td class='tabtext'>Основной баланс</td><td class='tabtext'>Рубли</td><td align='center' class='tabtext'>(.+)</td>");
- // rxParsingBalanse.setMinimal(true);
- // rxParsingBalanse.indexIn(answer);
- // QString balanseStr = rxParsingBalanse.cap(1);
- // mutex.lock();
- // double balanse = balanseStr.toDouble();
- // qint64 res = timer.elapsed();
- // qint64 sec = res / 1000;
- // qint64 min = sec / 60;
- // qint64 hr = min / 60;
- // sec %= 60;
- // min %= 60;
- // QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
- // //QString timeElapsed; QTextStream(&timeElapsed) << hr << ":" << min << ":" << sec;
- // model->insertRow(0);
- // model->setData(model->index(0, 0), phone);
- // QColor color;
- // if (balanse < 10) {
- // color = Qt::red;
- // } else if (balanse > 10 && balanse < 50) {
- // color = Qt::darkRed;
- // } else if (balanse > 50 && balanse < 100) {
- // color = Qt::darkBlue;
- // } else {
- // color = Qt::darkGreen;
- // }
- // model->setData(model->index(0, 1), QColor(color), Qt::ForegroundRole);
- // model->setData(model->index(0, 1), balanse);
- // model->setData(model->index(0, 2), timeElapsed);
- // mutex.unlock();
- // //qDebug() << phone << balanse << "end";
- // //exec();
- // //qDebug() << "BeelinerThread::run() end";
- }
- void BeelinerThread::writeError(QString fileName, QString data)
- {
- QFile file(fileName);
- file.open(QIODevice::Append);
- QTextStream out(&file);
- out << data << endl;
- file.close();
- }
- Beeliner::Beeliner(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Beeliner)
- {
- ui->setupUi(this);
- QTextCodec *codec = QTextCodec::codecForName("UTF-8");
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- model = new QStandardItemModel(0, 3, this);
- model->setHorizontalHeaderLabels(QStringList() << "Номер" << "Баланс" << "Время парсинга");
- ui->tableView->setModel(model);
- ui->tableView->setSortingEnabled(true);
- ui->tableView->sortByColumn(1, Qt::DescendingOrder);
- ui->tableView->horizontalHeader()->resizeSection(0, 200);
- ui->tableView->horizontalHeader()->resizeSection(1, 100);
- ui->tableView->horizontalHeader()->setStretchLastSection(true);
- QString progDir = QDir::currentPath();
- filePhones = progDir + "/logins.txt";
- fileErrors = progDir + "/errors.txt";
- QFile file(filePhones);
- file.open(QIODevice::ReadOnly);
- QTextStream in(&file);
- QStringList phonesNoClear;
- while (!in.atEnd()) {
- phonesNoClear.append(in.readLine());
- }
- file.close();
- phones = phonesNoClear.filter(QRegExp("^[0-9]+.+$"));
- QString buttonLabel = "Телефоны " + QString::number(phones.count()) + "(" + QString::number(phones.count()) + ")";
- ui->pushButtonPhones->setText(buttonLabel);
- phonesDialog = 0;
- }
- Beeliner::~Beeliner()
- {
- delete ui;
- delete model;
- }
- void Beeliner::on_pushButtonPhones_clicked()
- {
- if (phonesDialog == 0) {
- phonesDialog = new QDialog(this);
- uiPhones.setupUi(phonesDialog);
- modelPhones = new QStandardItemModel(0, 1, this);
- modelPhones->setHorizontalHeaderItem(0, new QStandardItem("Телефоны"));
- uiPhones.tableViewPhones->setModel(modelPhones);
- uiPhones.tableViewPhones->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
- uiPhones.tableViewPhones->setShowGrid(false);
- uiPhones.tableViewPhones->verticalHeader()->setDefaultSectionSize(20);
- for (int i = 0; i < phones.count(); i++) {
- QStandardItem *item = new QStandardItem(phones[i]);
- item->setCheckable(true);
- item->setCheckState(Qt::Checked);
- item->setEditable(true);
- modelPhones->setItem(i, item);
- }
- uiPhones.checkBoxAll->setCheckState(Qt::Checked);
- connect(uiPhones.checkBoxAll, SIGNAL(stateChanged(int)), this, SLOT(ckeckAll(int)));
- connect(modelPhones, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(addPhoneForParsing(QStandardItem*)));
- connect(uiPhones.pushButtonAdd, SIGNAL(clicked()), this, SLOT(addPhone()));
- connect(uiPhones.pushButtonDelete, SIGNAL(clicked()), this, SLOT(deletePhone()));
- connect(uiPhones.pushButtonChange, SIGNAL(clicked()), this, SLOT(changePhone()));
- phonesDialog->exec();
- } else {
- phonesDialog->exec();
- }
- }
- void Beeliner::addPhoneForParsing(QStandardItem *item)
- {
- if (item->checkState() == 2) {
- phonesForParsing << item->text();
- } else {
- phonesForParsing.removeOne(item->text());
- }
- phonesForParsing.removeDuplicates();
- phonesForParsing = phonesForParsing.filter(QRegExp("[^0]+"));
- QString buttonLabel = "Телефоны " + QString::number(phonesForParsing.count()) + "(" + QString::number(phones.count()) + ")";
- ui->pushButtonPhones->setText(buttonLabel);
- }
- void Beeliner::ckeckAll(int state)
- {
- if (phones.isEmpty()) {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Нече выделять"));
- } else {
- if (state == 0) {
- for (int i = 0; i < phones.count(); i++) {
- modelPhones->item(i)->setCheckState(Qt::Unchecked);
- phonesForParsing << "0";
- phonesForParsing.removeDuplicates();
- }
- } else {
- for (int i = 0; i < phones.count(); i++) {
- modelPhones->item(i)->setCheckState(Qt::Checked);
- }
- }
- }
- }
- void Beeliner::addPhone()
- {
- bool ok;
- QString text = QInputDialog::getText(phonesDialog, tr("Введи номер"),
- tr("Номер:"), QLineEdit::Normal,
- tr("телефон:пароль:город"), &ok);
- if (ok && !text.isEmpty()) {
- QRegExp rx("^[0-9]+.+$");
- if (rx.exactMatch(text)) {
- QStandardItem *item = new QStandardItem(text);
- item->setCheckable(true);
- item->setEditable(true);
- modelPhones->setItem(phones.count(), item);
- phones << text;
- writePhones(filePhones, phones);
- QString buttonLabel = "Телефоны " + QString::number(phonesForParsing.count()) + "(" + QString::number(phones.count()) + ")";
- ui->pushButtonPhones->setText(buttonLabel);
- } else {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Неверный формат!"));
- }
- }
- }
- void Beeliner::deletePhone()
- {
- if (!uiPhones.tableViewPhones->selectionModel()->selectedRows().isEmpty()) {
- if (QMessageBox::question(phonesDialog, tr("Удаление номера"), tr("Удалить?"),
- QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No)
- return;
- else {
- int count = uiPhones.tableViewPhones->selectionModel()->selectedRows().count();
- for (int i = 0; i < count; ++i) {
- phones.removeOne(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).data().toString());
- if (phonesForParsing.contains(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).data().toString())) {
- phonesForParsing.removeOne(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).data().toString());
- }
- modelPhones->removeRow(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).row(), QModelIndex());
- }
- QString buttonLabel = "Телефоны " + QString::number(phonesForParsing.count()) + "(" + QString::number(phones.count()) + ")";
- ui->pushButtonPhones->setText(buttonLabel);
- writePhones(filePhones, phones);
- if (phones.isEmpty()){
- QFile::remove(filePhones);
- }
- }
- } else if (phones.isEmpty()) {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Нече удалять"));
- } else {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Надо выделить номер!"));
- }
- }
- void Beeliner::changePhone()
- {
- if (phones.isEmpty()) {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Нече изменять")); return;
- } else if (uiPhones.tableViewPhones->selectionModel()->selectedRows().count() == 0){
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Надо выделить номер!")); return;
- }
- bool ok;
- QString text = QInputDialog::getText(phonesDialog, tr("Введи номер"),
- tr("Номер:"), QLineEdit::Normal,
- uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).data().toString(), &ok);
- if (ok && !text.isEmpty()) {
- QRegExp rx("^[0-9]+.+$");
- if (rx.exactMatch(text)) {
- modelPhones->item(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).row())->setText(text);
- phones.replace(uiPhones.tableViewPhones->selectionModel()->selectedRows().at(0).row(), text);
- writePhones(filePhones, phones);
- } else {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Неверный формат!"));
- }
- } else {
- }
- }
- void Beeliner::on_pushButton_clicked()
- {
- ui->labelResult->setText("Старт!");
- if (phones.isEmpty()) {
- QMessageBox::information(this, tr("Косяк"),
- tr("Нет телефонов для парсинга"));
- return;
- }
- if (model->rowCount() > 0) {
- model->insertRows(0, 3);
- //model->removeRows(0, model->rowCount());
- }
- if (phonesForParsing.isEmpty()) {
- phonesForParsing = phones;
- } else if (phonesForParsing[0] == "0") {
- QMessageBox::information(phonesDialog, tr("Косяк"), tr("Не выбраны телефоны для парсинга"));
- return;
- }
- result = 0;
- for (int i = 0; i < phonesForParsing.count(); i++) {
- BeelinerThread *getBalanse = new BeelinerThread(this);
- getBalanse->iter = i;
- getBalanse->failCount = 0;
- getBalanse->phonesForParsing = phonesForParsing;
- getBalanse->model = model;
- getBalanse->start();
- connect(getBalanse, SIGNAL(finished()), this, SLOT(resultCount()));
- //connect(getBalanse, SIGNAL(finished()), getBalanse, SLOT(deleteLater()));
- //getBalanse->wait();
- //delete getBalanse;
- //getBalanse->deleteLater();
- }
- }
- void Beeliner::writePhones(QString fileName, QStringList list)
- {
- QString str = list.join("\r\n");
- QFile file(fileName);
- file.open(QIODevice::WriteOnly);
- QTextStream out(&file);
- out << str;
- file.close();
- }
- void Beeliner::resultCount()
- {
- result++;
- QString resultStr;
- if (result < phonesForParsing.count()) {
- resultStr = QString::number(result);
- } else {
- resultStr = QString::number(result) + " <span style=color:green;>Готово!</span>";
- }
- ui->labelResult->setText(resultStr);
- }
- // QList<QNetworkCookie> cookiesTest = cookieJar->getAllCookies();
- // qDebug() << cookiesTest;
- // qDebug() << cookieJar; //return;
- // qDebug() << cookieJar;
- // QNetworkRequest requestt = reply->request();
- // qDebug() << "Request headers: ";
- // QList<QByteArray> reqHeaders = requestt.rawHeaderList();
- // foreach( QByteArray reqName, reqHeaders )
- // {
- // QByteArray reqValue = requestt.rawHeader( reqName );
- // qDebug() << reqName << ": " << reqValue;
- // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement