Russian Qt Forum

Qt => Работа с сетью => Тема начата: Perchilla от Декабрь 02, 2005, 23:48



Название: QHttp: передача методом post
Отправлено: Perchilla от Декабрь 02, 2005, 23:48
Не подкинет кто - нибудь примерчик передачи строки методом post для QT4? Get - не катит, строка длинная, в примерах ничего нет, а пример из книги Бланшета что - то не работает  :? .


Название: QHttp: передача методом post
Отправлено: crocus от Декабрь 05, 2005, 10:04
Ни post, ни request что-не проходит.
void HttpWindow::uploadFile()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                                tr("OpenFile"),
                                openFilesPath,
                                tr("All Files (*);;Text Files (*.txt)"));
    if (!fileName.isEmpty())
    openFilesPath = fileName;
    QFileInfo path(openFilesPath);
    QString fileName1 = path.fileName();
    QStringList lines;
    QByteArray bytes;
    file = new QFile(fileName1);
    if ( !file->open(QIODevice::ReadOnly) ) {
       QMessageBox::information(this, tr("HTTP"),
                                 tr("Unable to open the file %1: %2.")
                                 .arg(fileName1).arg(file->errorString()));
     
           }
  QHttpRequestHeader header("POST", "/upload.php");
        header.setValue("Host", "foliant");
        header.setContentType("application/x-www-form-urlencoded");
        QString encodedTopic = fileName1;
        QString searchString = "file=" + encodedTopic;
        http->setHost("foliant");
        httpRequestAborted = false;
        http->request(header, searchString.toUtf8(), file);        
        urlLineEdit->setText(encodedTopic);    
  }
На хлам в коде не обращайте внимания это заготовка.


Название: QHttp: передача методом post
Отправлено: Perchilla от Декабрь 07, 2005, 08:23
Благодарю за ответ! Сейчас попробую.


Название: QHttp: передача методом post
Отправлено: crocus от Декабрь 08, 2005, 05:39
Вот блин лабуда, сервер пишет что все нормально, PHP тоже ошибок не выдает (правда поля referer и user-agent пустые "-"), а если аплодить через страницу нет проблем referer - "страница с которой отправляем"


void HttpWindow::uploadFile()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                                tr("OpenFile"),
                                openFilesPath,
                                tr("All Files (*);;Text Files (*.txt)"));
    if (!fileName.isEmpty())
    openFilesPath = fileName;
    QFileInfo path(openFilesPath);
     QString fileName1 = path.fileName();
     userfile = new QFile(openFilesPath);
    if ( !userfile->open(QIODevice::ReadOnly) ) {
       QMessageBox::information(this, tr("HTTP"),
                                 tr("Unable to open the file %1: %2.")
                                 .arg(openFilesPath).arg(userfile->errorString()));
     
           }
        QHttpRequestHeader header("POST", "/upload.php", 1, 1);
        header.setValue("Host", "ваш_хост");
        header.setValue("Content-type", "multipart/form-data,  boundary=AaB03x");
        header.setValue("Cache-Control", "no-cache");
        header.setValue("Accept","*/*");
        QByteArray byt(openFilesPath.toUtf8());
        QByteArray bytes;
        bytes.append("--AaB03x\r\n");
        bytes.append("content-disposition: ");
         bytes.append("form-data; name=\"userfile\"; filename=\"" + byt+ "\"\r\n");  
         bytes.append("Content-Transfer-Encoding: binary\r\n");
         bytes.append("\r\n");      
        bytes.append(userfile->readAll());
        userfile->close(); // the file is opened earlier in the code
        bytes.append("\r\n");
        bytes.append("--AaB03x--\r\n");
        int contentLength = bytes.length();
        header.setContentLength(contentLength);
        http->setHost("foliant");
        httpRequestAborted = false;
        httpGetId = http->request(header, bytes);        
        urlLineEdit->setText(openFilesPath); // проверка файла и пути  
    }

Победа разума. Ошибка в коде исправлена можно пользоваться.