[Solved]Problem Downloading a file
-
Hi All,
Some of you know how should I create an url that contains "+" to be able to do a get using QNetworkAccessManager?
When a try to perform a get to this link:
http://myStore/zip/myZip+.zip
I have an error: "ContentNotFoundError", but if I try to use it on Firefox it runs.
The real name of my file is: myZip+.zipThanks.
-
Have you tried "this":http://doc.qt.nokia.com/latest/qurl.html#toPercentEncoding ?
-
Yes but it doesn't wirk
-
How are you constructing your url? Have you tried http://doc.qt.nokia.com/latest/qurl.html#fromEncoded-2 using QUrl::TolerantMode as the parsing mode?
-
Well, the QUrl::toPercentEncoding() does exactly what you want, but without code and/or debug messages (how does your percent-encoded URL look?), we probably can't help you.
Try your program with _%2_B instead of the + in the URL (without underscores, this forum doesn't let me post _%2_B without underscores, it allways turns to "+") and see if it works.
-
My url already have %_2_B instead of +, but server when i perform get answer: ContentNotFoundError, but if i put the same url into firefox I'm able to download right file.
-
-
This is my code:
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@After this request function: connectionError, it's a slot connected in this way:
@
connect(iNetReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(connectionError(QNetworkReply::NetworkError)));
@Write on console: Error code= 203
@
void PlotterDownloadThread::connectionError(QNetworkReply::NetworkError code)
{
qDebug()<<"Error code= "<<code;
}
@ -
as stated earlier, your URL should be percent-encoded. I don't see the .toPercentEncoding() method used, even though you said you used it.
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@should be
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip").toPercentEncoding()));
@ -
[quote]My url already have %_2_B instead of +, but server when i perform get answer: ContentNotFoundError, but if i put the same url into firefox I’m able to download right file.[/quote]
Can you use wireshark or a similar tool to analyze the HTTP traffic and understand what's going on?
[quote author="Eus" date="1314173671"]as stated earlier, your URL should be percent-encoded. I don't see the .toPercentEncoding() method used, even though you said you used it.
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip")));
@should be
@
iNetReply = iNetManager->get(QNetworkRequest(QUrl("http://myStore-dev.myCompany.com/lmn/00000/fetch?device=00000&file=myFile+.zip").toPercentEncoding()));@
[/quote]This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor, and you don't want to percent encode that url (thus escaping :, /, ?, &, etc.).
-
[quote author="peppe" date="1314174967"]
This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor
[/quote]The compiler will call the non-explicit QString(QByteArray) constructor for this, unless QT_NO_CAST_FROM_ASCII is defined.
-
[quote author="Volker" date="1314177476"]
[quote author="peppe" date="1314174967"]
This is completely nonsense. Not only that doesn't compile, but there's no QNetworkRequest(QByteArray) ctor
[/quote]The compiler will call the non-explicit QString(QByteArray) constructor for this, unless QT_NO_CAST_FROM_ASCII is defined.
[/quote]Nope -- QNetwokRequest wants a QUrl. There are two conversions to be made (QByteArray -> QString -> QUrl), and C++ forbids that (not to mention the fact that you can disable either of them with macros).
-
Then what should i do?
-
It's what I'm trying to do...
-
[quote author="peppe" date="1314177763"]
Nope -- QNetwokRequest wants a QUrl. There are two conversions to be made (QByteArray -> QString -> QUrl), and C++ forbids that (not to mention the fact that you can disable either of them with macros).
[/quote]Eek, you're right. I mixed up the parentheses. I need to do more LISP to get used to that ;-)
-
Solved!!!
Below the solution about my problem:@
QString strUrl="http://myStore-dev.com/zip/mioFile%2_B.zip";QByteArray baUrl(strUrl.toAscii().data());
QUrl tmpUrl1;
tmpUrl1.setEncodedUrl(baUrl);
iNetReply = iNetManager->get(QNetworkRequest(tmpUrl1));
@Thanks to all.
Bye bye.