浏览代码

Use x-www-form-urlencoded if no files are specified as post items

Antialize 14 年之前
父节点
当前提交
58c6827ac5
共有 1 个文件被更改,包括 39 次插入28 次删除
  1. 39 28
      src/lib/multipageloader.cc

+ 39 - 28
src/lib/multipageloader.cc

@@ -298,36 +298,46 @@ void ResourceObject::load() {
 	finished=false;
 	++multiPageLoader.loading;
 
-	QString boundary = QUuid::createUuid().toString().remove('-').remove('{').remove('}');
+	bool hasFiles=false;
+	foreach (const settings::PostItem & pi, settings.post) hasFiles |= pi.file;
 	QByteArray postData;
-	foreach (const settings::PostItem & pi, settings.post) {
-		//TODO escape values here
-		postData.append("--");
-		postData.append(boundary);
-		postData.append("\ncontent-disposition: form-data; name=\"");
-		postData.append(pi.name);
-		postData.append('\"');
-		if (pi.file) {
-			QFile f(pi.value);
-			if (!f.open(QIODevice::ReadOnly) ) {
-				error(QString("Unable to open file ")+pi.value);
-				multiPageLoader.fail();
+	QString boundary;
+	if (hasFiles) {
+		boundary = QUuid::createUuid().toString().remove('-').remove('{').remove('}');
+		foreach (const settings::PostItem & pi, settings.post) {
+			//TODO escape values here
+			postData.append("--");
+			postData.append(boundary);
+			postData.append("\ncontent-disposition: form-data; name=\"");
+			postData.append(pi.name);
+			postData.append('\"');
+			if (pi.file) {
+				QFile f(pi.value);
+				if (!f.open(QIODevice::ReadOnly) ) {
+					error(QString("Unable to open file ")+pi.value);
+					multiPageLoader.fail();
+				}
+				postData.append("; filename=\"");
+				postData.append( QFileInfo(pi.value).fileName());
+				postData.append("\"\n\n");
+				postData.append( f.readAll() );
+				//TODO ADD MIME TYPE
+			} else {
+				postData.append("\n\n");
+				postData.append(pi.value);
 			}
-			postData.append("; filename=\"");
-			postData.append( QFileInfo(pi.value).fileName());
-			postData.append("\"\n\n");
-			postData.append( f.readAll() );
-			//TODO ADD MIME TYPE
-		} else {
-			postData.append("\n\n");
-			postData.append(pi.value);
+			postData.append('\n');
 		}
-		postData.append('\n');
-	}
-	if (!postData.isEmpty()) {
-		postData.append("--");
-		postData.append(boundary);
-		postData.append("--\n");
+		if (!postData.isEmpty()) {
+			postData.append("--");
+			postData.append(boundary);
+			postData.append("--\n");
+		}
+	} else {
+		QUrl u;
+		foreach (const settings::PostItem & pi, settings.post)
+			u.addQueryItem(pi.name, pi.value);
+		postData = u.encodedQuery();
 	}
 
 
@@ -343,7 +353,8 @@ void ResourceObject::load() {
 	if (postData.isEmpty())
 		webPage.mainFrame()->load(r);
 	else {
-		r.setHeader(QNetworkRequest::ContentTypeHeader, QString("multipart/form-data, boundary=")+boundary);
+		if (hasFiles)
+			r.setHeader(QNetworkRequest::ContentTypeHeader, QString("multipart/form-data, boundary=")+boundary);
 		webPage.mainFrame()->load(r, QNetworkAccessManager::PostOperation, postData);
 	}
 }