Enable specifying raw headers for the request
authorShane Kearns <ext-shane.2.kearns@nokia.com>
Tue, 24 Apr 2012 14:57:24 +0000 (15:57 +0100)
committerQt by Nokia <qt-info@nokia.com>
Sat, 5 May 2012 01:50:41 +0000 (03:50 +0200)
Use "--headers=file" where the file contains the raw headers to send.
This is useful for replaying requests from log files.

Change-Id: I3bbe582d96fc9797f692a0d5772e8164f8265ce0
Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp
tests/manual/qnetworkaccessmanager/qget/qget.cpp
tests/manual/qnetworkaccessmanager/qget/qget.h

index 5eab6d4..f581315 100644 (file)
@@ -61,23 +61,20 @@ DownloadManager::~DownloadManager()
 
 }
 
-void DownloadManager::get(const QUrl &url, const QString &user, const QString &password)
+void DownloadManager::get(const QNetworkRequest &request, const QString &user, const QString &password)
 {
-    DownloadItem *dl = new DownloadItem(QNetworkRequest(url), user, password, nam);
+    DownloadItem *dl = new DownloadItem(request, user, password, nam);
     transfers.append(dl);
     connect(dl, SIGNAL(downloadFinished(TransferItem*)), SLOT(downloadFinished(TransferItem*)));
 }
 
-void DownloadManager::upload(const QUrl &url, const QString &user, const QString &password, const QString &filename, const QString &contentType, TransferItem::Method method)
+void DownloadManager::upload(const QNetworkRequest &request, const QString &user, const QString &password, const QString &filename, TransferItem::Method method)
 {
     QScopedPointer<QFile> file(new QFile(filename));
     if (!file->open(QFile::ReadOnly)) {
         qDebug() << "Can't open input file" << file->fileName() << file->errorString();
         return;
     }
-    QNetworkRequest request(url);
-    if (!contentType.isEmpty())
-        request.setHeader(QNetworkRequest::ContentTypeHeader, contentType);
     UploadItem *ul = new UploadItem(request, user, password, nam, file.take(), method);
     transfers.append(ul);
     connect(ul, SIGNAL(downloadFinished(TransferItem*)), SLOT(downloadFinished(TransferItem*)));
index cd98eff..7bc0529 100644 (file)
@@ -74,6 +74,7 @@ void printUsage()
              << "                   ,socks          SOCKS5 proxy" << endl
              << "                   ,ftp            FTP proxy" << endl
              << "                   ,httpcaching    HTTP caching proxy (no CONNECT method)" << endl
+             << "--headers=filename                 Set request headers from file contents" << endl
              << "--post=filename                    upload the file to the next url using HTTP POST" << endl
              << "--put=filename                     upload the file to the next url using HTTP PUT" << endl
              << "--content-type=<MIME>              set content-type header for upload" << endl
@@ -96,6 +97,7 @@ int main(int argc, char *argv[])
     QString contentType;
     QString httpUser;
     QString httpPassword;
+    QString headersFile;
     TransferItem::Method method = TransferItem::Get;
     //arguments match wget where possible
     foreach (QString str, app.arguments().mid(1)) {
@@ -161,19 +163,43 @@ int main(int argc, char *argv[])
         }
         else if (str.startsWith("--content-type="))
             contentType=str.mid(15);
+        else if (str.startsWith("--headers="))
+            headersFile=str.mid(10);
         else if (str == "--serial")
             dl.setQueueMode(DownloadManager::Serial);
         else if (str.startsWith("-"))
             qDebug() << "unsupported option" << str;
         else {
             QUrl url(QUrl::fromUserInput(str));
+            QNetworkRequest request(url);
+            //set headers
+            if (!headersFile.isEmpty()) {
+                QFile f(headersFile);
+                if (!f.open(QFile::ReadOnly | QFile::Text)) {
+                    qDebug() << "can't open headers file: " << headersFile;
+                } else {
+                    while (!f.atEnd()) {
+                        QByteArray line = f.readLine().trimmed();
+                        if (line.isEmpty()) break;
+                        int colon = line.indexOf(':');
+                        qDebug() << line;
+                        if (colon > 0 && colon < line.length() - 2) {
+                            request.setRawHeader(line.left(colon), line.mid(colon+2));
+                        }
+                    }
+                    f.close();
+                }
+            }
+            if (!contentType.isEmpty())
+                request.setHeader(QNetworkRequest::ContentTypeHeader, contentType);
+
             switch (method) {
             case TransferItem::Put:
             case TransferItem::Post:
-                dl.upload(url, httpUser, httpPassword, uploadFileName, contentType, method);
+                dl.upload(request, httpUser, httpPassword, uploadFileName, method);
                 break;
             case TransferItem::Get:
-                dl.get(url, httpUser, httpPassword);
+                dl.get(request, httpUser, httpPassword);
                 break;
             }
             method = TransferItem::Get; //default for urls without a request type before it
index 978212d..3cd5605 100644 (file)
@@ -98,8 +98,8 @@ class DownloadManager : public QObject
 public:
     DownloadManager();
     ~DownloadManager();
-    void get(const QUrl &url, const QString &user, const QString &password);
-    void upload(const QUrl &url, const QString &user, const QString &password, const QString &filename, const QString &contentType, TransferItem::Method method);
+    void get(const QNetworkRequest &request, const QString &user, const QString &password);
+    void upload(const QNetworkRequest &request, const QString &user, const QString &password, const QString &filename, TransferItem::Method method);
     void setProxy(const QNetworkProxy &proxy) { nam.setProxy(proxy); }
     void setProxyUser(const QString &user) { proxyUser = user; }
     void setProxyPassword(const QString &password) { proxyPassword = password; }