void FileBoom::onCaptchaSubmitted() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(this->sender()); if (!reply) { emit error(NetworkError); return; } QRegExp re("(http://fboom.me|)/file/url.html\\?file=[^'\"]+"); QString redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toString(); if (re.indexIn(redirect) == 0) { QUrl url(re.cap()); if (url.host().isEmpty()) { url.setScheme("http"); url.setHost("fboom.me"); } emit downloadRequestReady(QNetworkRequest(url)); } else { QString response(reply->readAll()); if (re.indexIn(response) >= 0) { QUrl url(re.cap()); if (url.host().isEmpty()) { url.setScheme("http"); url.setHost("fboom.me"); } emit downloadRequestReady(QNetworkRequest(url)); } else if (response.contains("verification code is incorrect")) { m_captchaKey = response.section("/file/captcha.html?v=", 1, 1).section('"', 0, 0); if (m_captchaKey.isEmpty()) { emit error(UnknownError); } else { emit statusChanged(CaptchaRequired); } } else { int secs = response.section("tik-tak\">", 1, 1).section('<', 0, 0).toInt(); if (secs > 0) { this->startWait(secs * 1000); this->connect(this, SIGNAL(waitFinished()), this, SLOT(getDownloadLink())); } } } reply->deleteLater(); }
void FileBoom::getDownloadLink() { QNetworkRequest request(m_url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setRawHeader("Referer", m_url.toString().toUtf8()); request.setRawHeader("X-Requested-With", "XMLHttpRequest"); QNetworkReply *reply = this->networkAccessManager()->post(request, "free=1&uniqueId=" + m_fileId.toUtf8()); this->connect(reply, SIGNAL(finished()), this, SLOT(checkDownloadLink())); this->connect(this, SIGNAL(currentOperationCancelled()), reply, SLOT(deleteLater())); this->disconnect(this, SIGNAL(waitFinished()), this, SLOT(getDownloadLink())); }
Youtube::Youtube(QUrl* url,QWidget *parent):QDialog(parent),pageUrl(url) { setupUi(this); getDownloadLink(pageUrl); }
void PublishToMePlugin::checkCaptcha() { QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); if (!reply) { emit error(tr("Network error")); return; } const QString redirect = getRedirect(reply); if (!redirect.isEmpty()) { if (FILE_REGEXP.indexIn(redirect) == 0) { emit downloadRequest(QNetworkRequest(redirect)); } else if (m_redirects < MAX_REDIRECTS) { followRedirect(redirect, SLOT(checkCaptcha())); } else { emit error(tr("Maximum redirects reached")); } reply->deleteLater(); return; } switch (reply->error()) { case QNetworkReply::NoError: break; case QNetworkReply::OperationCanceledError: reply->deleteLater(); return; default: emit error(reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString()); reply->deleteLater(); return; } const QString response = QString::fromUtf8(reply->readAll()); if (FILE_REGEXP.indexIn(response) != -1) { QString url = FILE_REGEXP.cap(); if (url.startsWith("/")) { url.prepend(reply->url().scheme() + "://" + reply->url().authority()); } emit downloadRequest(QNetworkRequest(url)); } else if (response.contains("verification code is incorrect")) { QString recaptchaKey = response.section("/file/captcha.html?v=", 1, 1).section('"', 0, 0); if (recaptchaKey.isEmpty()) { emit error(tr("No captcha key found")); } else { recaptchaKey.prepend(QString("http://%1/file/captcha.html?v=").arg(reply->url().host())); emit captchaRequest(RECAPTCHA_PLUGIN_ID, CaptchaType::Image, recaptchaKey, "submitCaptchaResponse"); } } else { const int secs = response.section("tik-tak\" >", 1, 1).section('<', 0, 0).toInt(); if (secs > 0) { startWaitTimer(secs * 1000, SLOT(getDownloadLink())); } else { emit error(tr("Unknown error")); } } reply->deleteLater(); }