获取简单 URL 时出现 QNetworkReply 错误“连接已关闭”
Posted
技术标签:
【中文标题】获取简单 URL 时出现 QNetworkReply 错误“连接已关闭”【英文标题】:QNetworkReply error "Connection closed" when getting a simple URL 【发布时间】:2014-10-06 13:55:31 【问题描述】:我正在尝试制作一个简单的文件下载器。这是我下载 URL 的代码段;如果我尝试获取诸如“http://***.com”之类的简单 URL,则此代码可以正常工作。 但是,当我指定 重定向 的 URL 时,它会抛出一个错误,提示 “连接已关闭”。
//Sets a sample URL which redirects.
QString url = "http://downloads.sourceforge.net/project/gretl/gretl/1.9.92/gretl-1.9.92.tar.xz"
QNetworkAccessManager * networkAccessManager = new QNetworkAccessManager(this);
QNetworkRequest * networkRequest = new QNetworkRequest(QUrl(url));
//Getting the URL
QNetworkReply * networkReply = networkAccessManager->get(*networkRequest);
此外,我还连接了以下信号槽以识别网络错误:
//Connects networkReply object's error signal to a slot which prints the error.
connect(networkReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(printError(QNetworkReply::NetworkError)));
这是在 networkReply 发出错误信号时打印错误的插槽:
void printError(QNetworkReply::NetworkError code)
qDebug() << "Network Error Code: " << code;
qDebug() << networkReply->errorString();
由于这个错误,networkReply 对象永远不会收到任何标头。
我的需要是通过这种方法读取HTTP状态码:QNetworkReply::attribute(QNetworkRequest::HttpStatusCodeAttribute)
我无法读取 HTTP 状态代码,因为我没有获取标头。
谁能说说怎么回事? 提前致谢! :)
【问题讨论】:
【参考方案1】:Here 和 here 是处理这种情况的好例子 - 基本上你为finished 信号添加一个槽,然后检查 301 和/或QNetworkRequest::RedirectionTargetAttribute
属性的 HTTP 状态代码,看看你是否正在重定向,如果是,则发出重定向链接的新请求。
【讨论】:
谢谢!我没有像示例中那样设置用户代理。它在指定用户代理时起作用。我认为服务器在发现我没有用户代理时会断开连接。以上是关于获取简单 URL 时出现 QNetworkReply 错误“连接已关闭”的主要内容,如果未能解决你的问题,请参考以下文章
我想从 JSON URL 获取图像,但是在 IOS 中获取图像时出现了一些错误
获取请求不会迅速执行,在请求中传递 URL 时出现 nil 值错误