В результате серии неудачных попыток я попытался выполнить простой запрос GET на Pastebin главная страница сайта с Qt 5.1:
typedef void (QNetworkReply::*ReplyError)(QNetworkReply::NetworkError);
int main(int argc, char *argv [])
{
QCoreApplication app(argc, argv);
QNetworkAccessManager manager;
QNetworkRequest request(QUrl("http://www.pastebin.com"));
QNetworkReply * reply = manager.get(request);
QObject::connect(reply, &QNetworkReply::finished, [reply] {
qDebug() << reply->readAll();
});
QObject::connect(reply, static_cast<ReplyError>(&QNetworkReply::error),
[reply](QNetworkReply::NetworkError code) {
qDebug() << "Error code : " << code;
qDebug() << "Reply : " << reply->readAll();
qDebug() << "Error string : " << reply->errorString();
qDebug() << "HTTP status : " << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
});
return app.exec();
}
Через некоторое время консоль выводит:
Error code : 99
Reply : ""Error string : "Connection timed out"HTTP status : 0
Я также узнал, что я получаю ip-забанение с их сайта на ~ 10 минут (я не могу получить доступ к сайту через браузер, пока не поменяю местоположение VPN).
Я попробовал тот же запрос в Python, и он работал нормально.
В чем здесь проблема? Проблема исходит от Qt или Pastebin?
Пробовал с Qt 4.8.5. Получил тот же результат.
Я попробовал почти 2 месяца спустя с той же версией фреймворка, и она работает сейчас. Я думаю, что они исправили что-то на сайте Pastbin …
Пытаться этот пример простой операции загрузки на любом URL, включая pastebin.
Это базовая реализация для менеджера загрузок, но вы должны иметь возможность сократить его для своих нужд. Если эта реализация также терпит неудачу с тем же тайм-аутом, то это может быть что-то не так с доступностью url pastebin или доступностью pastebin по сети.
Более того, в вашем коде соединение готово и сигнал об ошибке должны быть сделаны до manager.get(request)
,
Я надеюсь, что это помогает.
Других решений пока нет …