Seite 1 von 1

QHttp und Put Request?

Verfasst: 16. Oktober 2007 11:15
von fvonx
Hallo,

ich wuerde gerne einen Http PUT Request absetzen und mit diesem ein Dokument an einen Server verschicken. Mich wuerde interessieren, ob mir QHttp (in Verbindung mit QHttpRequestHeader vielleicht) dies ermoeglicht. Waere eine schoene Sache. Konnte dazu leider keine Informationen finden. Vielleicht weiß das ja jemand ...

Vielen Dank im Voraus!

Verfasst: 16. Oktober 2007 11:35
von Deever
HTTP PUT? Warum will man das verwenden? Verwende doch wie alle POST?

Gruß,
/dev

Verfasst: 16. Oktober 2007 11:37
von fvonx
Ich habe geahnt, dass man mir die Frage stellt. Leider muss ich einen Http Put machen, da es der Server so verlangt. :/

Verfasst: 16. Oktober 2007 12:14
von upsala
Ich schreib jetzt mal ohne es nachgeprüft zu haben:

Ist es nicht so, daß PUT auf die max. Länge einer URL beschränkt ist (~1024 Zeichen) und POST auf (je nach Serverstandardeinstellung, aber meist) 2-8MByte. Außerdem ist ja PUT nichts längeres als eine URL mit zusätzlichem Anhang (meist ?...). Somit müßtest du ja nur eine passende URL erstellen und diese abfragen.

Verfasst: 16. Oktober 2007 19:17
von fvonx
Muesste es nicht moeglich sein, mit QHttpRequestHeader PUT zu spefizieren und dann mit QHttp mit request Daten zu senden?

Code: Alles auswählen

request ( const QHttpRequestHeader & header, QIODevice * data = 0, QIODevice * to = 0 )
[/code]

Verfasst: 18. Oktober 2007 04:29
von patrik08
fvonx hat geschrieben:Muesste es nicht moeglich sein, mit QHttpRequestHeader PUT zu spefizieren und dann mit QHttp mit request Daten zu senden?

Code: Alles auswählen

request ( const QHttpRequestHeader & header, QIODevice * data = 0, QIODevice * to = 0 )
[/code]
Die Methode PUT senden ist etwa 1/3 schneller als Post... warum? weiss ich nicht...

wenn du PUT zu einen webdav server sendest dan etwa so:
http://qtwdav.googlecode.com/svn/trunk/ ... v/davput.h

zu einem Php script so:

Code: Alles auswählen

public: 
PutSender( QUrl urigo , const QString locfile , QObject * parent = 0 )
{
 urigoup = QUrl(urigo);
 doneCall =0;
 readyCall =0;
 setHost(urigoup.host(), 80);
 filehaving = true;
 primariFile = locfile;
 BeamUp = new QFile(locfile);   /* upload file */
 if (BeamUp->exists()) {
 BeamUp->open(QIODevice::ReadOnly);
 header.setRequest("PUT",urigoup.path(),1,1);
 header.setValue("Host",urigoup.host());
 header.setValue("User-Agent", WEBAGENTNAME );
 header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
 header.setValue("Accept-Language", "it,de-de;q=0.8,it-it;q=0.6,en-us;q=0.4,en;q=0.2");
 header.setValue("Connection", "keep-alive");
 } else {
    filehaving = false; 
 }
 
 
}

void Start()
{
    if (filehaving) {
  david = request(header,BeamUp,0);
  //////////std::cout << "Start file..:" <<  qPrintable(primariFile) << std::endl;
  /////////////std::cout << "Start request ID:" << david << " host:" << qPrintable(urigoup.host()) << " path:" << qPrintable(urigoup.path()) << std::endl;
  connect(this, SIGNAL(done(bool)), this, SLOT(Exitdone(bool)));
  connect(this, SIGNAL(dataSendProgress(int, int)), this, SLOT(SendStatus(int, int)));
  connect(this, SIGNAL(readyRead(const QHttpResponseHeader &)), this, SLOT(SaveData(const QHttpResponseHeader &)));
    } else {
        QMessageBox::information(0, tr("Error upload file."),tr("You file %1 is brocken or not valid.").arg(primariFile));
    }
}

Cookie und password richtig setzen dann geht es auch....

Verfasst: 18. Oktober 2007 22:05
von fvonx
Dankeschoen. War sehr hilfreich.