我正在使用需要从 SourceForge 下载文件的 Qt 框架编写 C++ 应用程序。
我必须下载这个文件https://sourceforge.net/projects/meshlab/files/updates/1.3.3/updates.xml
我使用 Qt 和 QHttp 类编写了以下代码:
QFile tmpfile;
int hostreqid;
int checkreqid;
...
...
tmpfile.setFileName("updates.xml");
hostreqid = http.setHost("sourceforge.net",QHttp::ConnectionModeHttp);
checkreqid = http.get(QString(QUrl::toPercentEncoding("/projects/meshlab/files/updates/1.3.3/updates.xml")),&tmpfile);
...
...
void parseAnswer( int id,bool error )
{
if (!error && (id == checkreqid))
{
...
tmpfile.close();
}
if (error)
{
QHttp::Error err = http.error();
QString errstrg = http.errorString();
}
}
QHttp::setHost 和 QHttp::get 都不是立即返回 int id 的阻塞函数。当 http 文件传输完成时,会自动调用 parseAnswer 函数。问题是,在我得到的updates.xml 文件中,我收到了来自SouceForge 的报告“Invalid Project”错误的html 文件,而不是我期待的数据。
我注意到当我从浏览器访问https://sourceforge.net/projects/meshlab/files/updates/1.3.3/updates.xml时,我已被重定向到https://sourceforge.net/projects/meshlab/files /updates/1.3.3/updates.xml/下载页面。我也尝试了这个其他地址,但没有任何改变。
请注意,我使用的是 Http 协议 (QHttp::ConnectionModeHttp) 而不是 https。如果可以的话,我希望避免使用 https。可能是问题的根源吗?
非常感谢!