2017-04-15 111 views
1

我正在使用QNetworkAcessManager从直接链接下载这个链接这里的链接 但它没有下载任何东西,QByteArray大小为0我在另一个mp3文件链接上尝试它和许多其他人,它的工作正常,但我想知道为什么这个链接无法下载我尝试使用Curl下载它和同样的问题 所以我尝试用java做它,但它给我一个错误通过使用QNetworkAcessManager的直接链接下载文件

Exception in thread "main" java.net.MalformedURLException: no protocol: www.proz.com/ht/profile_resources/022198_r4551c465d7a53.doc 

当我搜索这个错误时,它的解决方案是对它进行编码,所以我再次回来并在Qt中进行编码并使用此编码URL

//using QUrl To endcode the link 
reply = manager->get(QNetworkRequest(QUrl(QUrl(Link).toEncoded()))); 
connect(reply, SIGNAL(readyRead()), this, SLOT(CollectFile())); 
connect(reply, SIGNAL(finished()), this, SLOT(DocDownloaded())); 

但为Java和Qt编码后有啥casue这个问题,为什么它不能下载使用QNetworkacessManager或使用卷发
更新 该文件的网址我想下载
任何解决同样的问题

http://www.proz.com/ht/profile_resources/009424_r57075c01ae812.pdf 

预先感谢

+0

从Java错误它看起来好像你的URL缺少一个计划。你可以编辑你的问题来包含URL(或者甚至只是['QUrl :: scheme'](http://doc.qt.io/qt-5/qurl.html#scheme))的结果吗? –

+0

用'wget'检查事情表明这个URL实际上是一个重定向。尝试设置['QNetworkRequest']中的['QNetworkRequest :: FollowRedirectsAttribute'](http://doc.qt.io/qt-5/qnetworkrequest.html#Attribute-enum)属性(http://doc.qt .io/qt-5/qnetworkrequest.html#setAttribute)来查看是否有帮助。 –

回答

0

你试图构建QNetworkRequest为:

QNetworkRequest(QUrl(Link)) 

without'toEncoded'?

根据示例here,您需要使用QUrl::fromEncoded来从编码的url构造QUrl,或者直接跳过所有的操作。

+0

是的,我尝试没有编码相同的结果,它没有下载任何东西 –

0

我解决这个问题,但因为我有在网络发展的一点经验,我不知道为什么这个happend
我通过当我下载从正常的网页浏览器Firefox或任何或使用互联网下载管理器应用程序的文件解决问题链接是变化
来自:

http://www.proz.com/ht/profile_resources/009424_r57075c01ae812.pdf 

到:

http://cdn3.proz.com/profile_resources/009424_r57075c01ae812.pdf 

所以当我复制第二个链接,它现在可以从我的应用程序或使用Curl下载,但不知道对此的解释,因此,如果任何人都可以帮助并解释这种情况,为什么发生这种情况以及链接在我将其放入网络下载管理器并更改我新的链接,我将欣赏
这是我如何解决这个问题,但没有解释为什么发生这种情况

+1

对!现在很明显:你实际上并没有直接的联系。第一个重定向到另一个。这是一个已知的问题 - 最近刚添加的重定向支持。检查这篇文章:http://stackoverflow.com/a/36386724/3697939 – Youw