From 32adb82741b0a4851624b2e6b441b8d83fe6daf0 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 24 Apr 2012 15:57:24 +0100 Subject: Enable specifying raw headers for the request 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 --- .../qnetworkaccessmanager/qget/downloadmanager.cpp | 9 +++---- tests/manual/qnetworkaccessmanager/qget/qget.cpp | 30 ++++++++++++++++++++-- tests/manual/qnetworkaccessmanager/qget/qget.h | 4 +-- 3 files changed, 33 insertions(+), 10 deletions(-) (limited to 'tests/manual') diff --git a/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp b/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp index 5eab6d43bd..f581315c60 100644 --- a/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp +++ b/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp @@ -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 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*))); diff --git a/tests/manual/qnetworkaccessmanager/qget/qget.cpp b/tests/manual/qnetworkaccessmanager/qget/qget.cpp index cd98eff935..7bc0529e16 100644 --- a/tests/manual/qnetworkaccessmanager/qget/qget.cpp +++ b/tests/manual/qnetworkaccessmanager/qget/qget.cpp @@ -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= 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 diff --git a/tests/manual/qnetworkaccessmanager/qget/qget.h b/tests/manual/qnetworkaccessmanager/qget/qget.h index 978212dfa8..3cd5605076 100644 --- a/tests/manual/qnetworkaccessmanager/qget/qget.h +++ b/tests/manual/qnetworkaccessmanager/qget/qget.h @@ -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; } -- cgit v1.2.3