Russian Qt Forum
Март 29, 2024, 14:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QHttp
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QHttp (Прочитано 22462 раз)
kadr
Гость
QHttp
«
:
Январь 26, 2010, 09:34 »
Привет всем, народ есть задачка, надо отправить файл по http протоколу, методом post :
Исходя из справки:
Код:
http.setHost("http://192.168.1.223");
http.post("/farma/file_load.php", &file_tr);
Но ничего не получается!
Содержимое файла file_load.php
Код:
<?php
// Загрузка файлов на сервер
// Если register_globals=Off
// Если upload файла
/*if(isset($_FILES["myfile"]))
{ */
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];
// Если ошибок не было
if($error_flag == 0)
{
print("Имя файла на нашем сервере (во время запроса): ".$myfile."<br>");
print("Имя файла на компьютере пользователя: ".$myfile_name."<br>");
print("MIME-тип файла: ".$myfile_type."<br>");
print("Размер файла: ".$myfile_size."<br><br>");
$catalog = "/work/one/transfer/med_uch/".$myfile_name;
print("Каталог файла: ".$catalog."<br>");
copy($myfile, $catalog);
// Получаем содержимое файла
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile));
fclose($fp);
// Вывод содержимого файла
//print($content);
//} // end of if 2
} // end of if 1
?>
Если делать чере веб интерфейс:
Код:
<HTML>
<TITLE>Post metod</TITLE>
<BODY>
<FORM ENCTYPE="multipart/form-data" ACTION="file_load.php" METHOD=POST>
Paste the file: <INPUT NAME="myfile" TYPE="file"><br>
<p><input type="submit"></p>
</form>
</BODY>
</HTML>
то нормально все работает, файлик отправляется куда нужно, а через прогу не хочет!
Записан
SimpleSunny
Гость
Re: QHttp
«
Ответ #1 :
Январь 26, 2010, 10:05 »
Необходимо переходить на QNetworkAccessManager, так как QHttp больше не поддерживается.
А если по вопросу, то где-то так:
Код:
QHttpRequestHeader header;
QHttp http;
...
QByteArray boundary("*ANT34ONN5dbAS56uTA*");
QByteArray data("MY_FILE");
//запрос
QByteArray byte;
byte.append("--").append(boundary).append("\r\nContent-Disposition: form-data; name=\"method\"\r\n\r\n");
byte.append("post\r\n--").append(boundary).append("\r\n");
byte.append("Content-Disposition: form-data; name=\"file\"; filename=\"all.jpg\"\r\n");
byte.append("Content-Type: image/jpeg\r\n\r\n");
byte.append(data).append("\r\n--").append(boundary).append("--");
header.setValue("Content-Type", QString("multipart/form-data; boundary=").append(boundary));
http.request(header, byte);
«
Последнее редактирование: Январь 26, 2010, 10:09 от SimpleSunny
»
Записан
Sahab
Гость
Re: QHttp
«
Ответ #2 :
Январь 26, 2010, 10:28 »
"This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code."
Вообще-то поддерживается... хоть и рекомендуют пользоваться новым
Записан
kibsoft
Хакер
Offline
Сообщений: 625
Re: QHttp
«
Ответ #3 :
Январь 26, 2010, 10:39 »
Цитировать
"This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code."
Вообще-то поддерживается... хоть и рекомендуют пользоваться новым
Вообще-то он предоставляется, но больше не поддерживается
Записан
http://kibsoft.ru
- Download the Qt Media Encoding Library here
The apps that were written using QtMEL:
http://srecorder.com
- Screen recording software
kadr
Гость
Re: QHttp
«
Ответ #4 :
Январь 26, 2010, 10:42 »
Хорошо, я внял совету и полазил в интернете в поисках описалова по QNetworkAccessManager, кое что нашел:
Код:
QNetworkAccessManager manager;
QUrl apiUrl;
QFile file_tr(seting.value("id_uch").toString().trimmed()+"_nomenklatura.csv");
if (file_tr.open(QIODevice::ReadOnly))
{
apiUrl = "http://192.168.1.223/farma/file_load.php";
requestString = "method=getQuote&format=csv";
QNetworkRequest request(apiUrl);
reply = manager.post(request, requestString);
connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
}
void nomkl_num::getReplyFinished()
{
reply->deleteLater();
}
void nomkl_num::readyReadReply()
{
QString answer = QString::fromUtf8(reply->readAll());
}
Проверил дебагером, соединения вообще не происходит, скажите, как можно передать файл по http протоколу!
Записан
kibsoft
Хакер
Offline
Сообщений: 625
Re: QHttp
«
Ответ #5 :
Январь 26, 2010, 10:52 »
Код:
qDebug()<<connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
qDebug()<<connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
А ты так проверь есть соединение или нет..если будет true, то просто сигналы не высылаются..а следовательно не выполняется условие, при котором они должны высылаться..
Записан
http://kibsoft.ru
- Download the Qt Media Encoding Library here
The apps that were written using QtMEL:
http://srecorder.com
- Screen recording software
Sahab
Гость
Re: QHttp
«
Ответ #6 :
Январь 26, 2010, 10:53 »
($QTDIR)\examples\network\downloadmanager\
Записан
kadr
Гость
Re: QHttp
«
Ответ #7 :
Январь 26, 2010, 10:55 »
Цитата: kibsoft от Январь 26, 2010, 10:52
Код:
qDebug()<<connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
qDebug()<<connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
А ты так проверь есть соединение или нет..если будет true, то просто сигналы не высылаются..а следовательно не выполняется условие, при котором они должны высылаться..
Да вышло true!
Записан
kadr
Гость
Re: QHttp
«
Ответ #8 :
Январь 26, 2010, 11:05 »
Цитата: Sahab от Январь 26, 2010, 10:53
($QTDIR)\examples\network\downloadmanager\
В целом тоже самое что и у меня!
Записан
kadr
Гость
Re: QHttp
«
Ответ #9 :
Январь 26, 2010, 11:10 »
Дело в том, что там описано как скачать что, от куда-то, а мне надо передать файл!
Записан
Sahab
Гость
Re: QHttp
«
Ответ #10 :
Январь 26, 2010, 11:21 »
а где в Вашем коде идет передача содержимого файла?
Записан
Sahab
Гость
Re: QHttp
«
Ответ #11 :
Январь 26, 2010, 11:23 »
QNetworkReply * QNetworkAccessManager::post ( const QNetworkRequest & request, const QByteArray & data )
This is an overloaded function.
Sends the contents of the data byte array to the destination specified by request.
+
http://ru.wikipedia.org/wiki/HTTP
Записан
kadr
Гость
Re: QHttp
«
Ответ #12 :
Январь 26, 2010, 11:36 »
apiUrl = "
http://192.168.1.223/farma/file_load.php
";
QNetworkRequest request(apiUrl);
reply = manager.post(request, &myfile);
qDebug()<< connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
qDebug()<< connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
qDebug()<< reply->errorString();
Записан
voronElf
Гость
Re: QHttp
«
Ответ #13 :
Январь 26, 2010, 11:40 »
По теме SimpleSunny +1
подход все по протоколу, а через QHttp или через QMetworkmanager отсылать разницы нету, кроме того что QHttp нестабилен )))
Для kadr, в коде с QNetworkAccessManager непонятно немного, видно QNetworkAccessManager создается на стеке, но сигналы со слотами связываются по this. Можт в этом и трабла, что ответов сервака не получаешь. Нужно чтобы менеджер существовал все время пока ходят запросы и приходят-отрабатываются ответы http.
У меня была подобная задача давненько уже, жаль совета подобного коду от SimpleSunny не увидел в нужное время а сделал так: брал данные файла, совал в пост без изменений, с Content-type: application/octet-stream (чтоб разбора пост на сервере не было перед выполнением скрипта-приемщика). Скрипт-приемщик писал сам, брал $_HTTP_RAW_POST_DATA и все нормально проканывало.
P.S. можт потому что немного не по протоколу поступал, в Qt 4.5.2 при такой отправке через прокси запрос не проходил до сервака, а без прокси нормально ходил.
Записан
Sahab
Гость
Re: QHttp
«
Ответ #14 :
Январь 26, 2010, 11:52 »
а это к чему было?
...
requestString = "method=getQuote&format=csv";
...
и м.б.
QNetworkAccessManager *manager = new QNetworkAccessManager(this); ?
«
Последнее редактирование: Январь 26, 2010, 11:54 от Sahab
»
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...