我正在編寫一個使用Qt框架的C++應用程序,需要從SourceForge下載文件。如何使用Qt從SourceForge下載文件
我要下載此文件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 ::得到未阻止功能立即返回一個int id。當http文件傳輸完成時,會自動調用parseAnswer函數。 問題是,我得到的updates.xml文件中,而是我期待的數據,我收到了SouceForge報告「無效項目」錯誤的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/download頁面。我也嘗試了這個地址,但沒有任何改變。
請注意,我使用Http協議(QHttp :: ConnectionModeHttp)而不是https。如果我可以,我希望避免使用https。可能是問題的根源?
非常感謝!
嘗試直接鏈接:http://ignum.dl.sourceforge.net/project/meshlab/updates/1.3.3/updates.xml –
此外,QHttp已棄用,通常建議您不要使用它。 QNetworkAccessManager是替代品。 –
我嘗試了你的建議。使用downloads.sourceforge.net/project/meshlab/updates/1.3.3/updates.xml我沒有收到「Invalid Project」錯誤。不幸的是,現在我得到一個完全空的文件。其他一些想法?非常感謝你的幫助! –