尝试使用Qt访问Pastebin时连接超时

时间:2013-07-14 18:01:27

标签: c++ qt http pastebin

一系列失败的尝试让我尝试使用Qt 5.1向Pastebin网站的主页尝试一个简单的GET请求:

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

我还发现它让我在他们的网站上被禁止了大约10分钟(除非我改变我的VPN位置,否则无法使用我的浏览器访问网站)。

我在python中尝试了相同的请求并且工作正常。

这是什么问题?问题来自Qt还是Pastebin?

编辑:

尝试使用Qt 4.8.5。得到了相同的结果。

编辑2:

我差不多2个月后尝试使用相同版本的框架,现在可以使用了。我猜他们在Pastbin网站上修了一些东西......

1 个答案:

答案 0 :(得分:0)

尝试this示例,对包括pastebin在内的任何网址进行简单的下载操作。

这是下载管理器的基本实现,但您应该能够根据自己的需要将其删除。如果此实现也以相同的超时失败,则可能是网络上的pastebin url或pastebin可访问性有问题。

此外,在您的代码中,完成和错误信号的连接应在manager.get(request)之前完成。

我希望它有所帮助。