Автор: grio 6.4.2010, 18:01
Салют, парни!
Потелял несколько дней на QFtp и его перманентную ошибку "Downloading file failed:SIZE not allowed in ASCII mode"
А сегодняшний день слил переписывая код под QNetworkAccessManager.
Проблема такая: логин содержит символ @, который трактуется, как разделитель при работе с QNetworkAccessManager.
В QFtp такой проблемы небыло, но он жестко глючит. И, как я понял, их вместе с QHttp сняли с производства. )
Пробовал заменить '@' на '%40' - результат выполнения авторизации другой, но тоже отрицательный.
Что делать, если логин не меняется?
br,
grio.
Автор: kwisp 6.4.2010, 21:21
grio,
уверен что это именно QNetworkAccessManager виноват.
может ты сам запрос неверно составляешь.
возьми снифером проверь как с этой проблемой справляется QFtp.
и отправь такой же запрос авторизации.
покажи код.
Автор: DIMEDROLL 6.4.2010, 22:00
Цитата(grio @ 6.4.2010, 18:01)
Салют, парни!
Потелял несколько дней на QFtp и его перманентную ошибку "Downloading file failed:SIZE not allowed in ASCII mode"
Работал с QFtp и никаких таких проблем не возникало. В семлах есть пример - скачивалка файлов, посмотри, авось поможет.
Авось этот глюк сервера?!
Автор: grio 7.4.2010, 4:13
Цитата(kwisp @ 6.4.2010, 22:21)
grio,
уверен что это именно QNetworkAccessManager виноват.
может ты сам запрос неверно составляешь.
возьми снифером проверь как с этой проблемой справляется QFtp.
и отправь такой же запрос авторизации.
покажи код.
QFtp работает с сервером отдельными командами. Сначала авторизуется, потом заходит в директорию, а только потом запрашивает файл.
QNetworkAccessManager пытается все сделать в одном запросе. Сперва фомирует строку ftp://login%3a%70ass@server/file из составляющих QUrl, а потом делает запрос. В этом как раз и проблема.
Цитата
Работал с QFtp и никаких таких проблем не возникало. В семлах есть пример - скачивалка файлов, посмотри, авось поможет.
Авось этот глюк сервера?!
Возможно у сервера тоже есть какая то проблема однако, через FTP-клиент Тотал Коммандера я с ним прекрасно работаю. Если хочешь увидеть глюк QFtp, попробуй создать на ftp пользователя с e-mail в качестве логина и запросить любой существующий файл (иногда срабатывает, но чаще выдает ошибку) К сожалению, в семплах нет ни одного примера с авторизацией.
connect(ftp, SIGNAL(done(bool)), this, SLOT(done(bool)));
ftp->connectToHost("ftp.some.ru");
ftp->login("anonymous@some.ru");
ftp->get("file",
&file,
QFtp::Binary);
Автор: Litkevich Yuriy 7.4.2010, 4:56
Цитата(grio @ 7.4.2010, 8:13)
создать на ftp пользователя с e-mail в качестве логина
в тотале в качестве пароля предлагается электропочта, но не в качестве имени. Может всё таки не правильно использовать электропочту в имени пользователя?
Автор: grio 7.4.2010, 5:50
Цитата(Litkevich Yuriy @ 7.4.2010, 5:56)
Цитата(grio @ 7.4.2010, 8:13)
создать на ftp пользователя с e-mail в качестве логина
в тотале в качестве пароля предлагается электропочта, но не в качестве имени. Может всё таки не правильно использовать электропочту в имени пользователя?
Правильно или нет, но вот такой у меня хостинг провайдер...
Сейчас поставил Сербера на локальную машину - проблем с QFtp не наблюдаю.
Значит да, дело в удаленном сервере. И нашелhttp://qt-apps.org/content/show.php/Scythia?content=61326:
Исходники довольно хитрые, да и комменты на французском, что скорее мешает, чем помогает.
Но этот фтп-клиент качает с моего хостинга. Правда вместо %% загрузки показывает какую то шляпу. И после соединения, сперва возвращает пустой список файлов, а лишь по "CWD /" реальный. Но качает все же...
Возможно, надо делать паузу между командами серверу. Не пойму пока.
Автор: kwisp 7.4.2010, 8:01
grio,
по-моему надо читать протокол ftp, возможно есть как в bash`e какой-нить экран для передачи @ в имени в качестве символа а не разделителя. типа обратного слэша и проч.
Автор: kwisp 7.4.2010, 8:32
Цитата(grio @ 7.4.2010, 5:13)
QFtp работает с сервером отдельными командами. Сначала авторизуется, потом заходит в директорию, а только потом запрашивает файл.
QNetworkAccessManager пытается все сделать в одном запросе. Сперва фомирует строку ftp://login%3a%70ass@server/file из составляющих QUrl, а потом делает запрос. В этом как раз и проблема.
Так с помощью
QNetworkAccessManager тоже можно сначала залогиниться а потом работать.
====добавлено====
вот вроде еще так можно попробовать ftp://login%3a%70ass#ftphost.ru/ но это тоже зависит от хоста