QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request, bool throughProxy) { QByteArray ba = request.d->methodName(); QByteArray uri = request.d->uri(throughProxy); ba += ' ' + uri; QString majorVersion = QString::number(request.majorVersion()); QString minorVersion = QString::number(request.minorVersion()); ba += " HTTP/" + majorVersion.toLatin1() + '.' + minorVersion.toLatin1() + "\r\n"; QList<QPair<QByteArray, QByteArray> > fields = request.header(); QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); for (; it != fields.constEnd(); ++it) ba += it->first + ": " + it->second + "\r\n"; if (request.d->operation == QHttpNetworkRequest::Post) { // add content type, if not set in the request if (request.headerField("content-type").isEmpty()) ba += "Content-Type: application/x-www-form-urlencoded\r\n"; if (!request.d->uploadByteDevice && request.d->url.hasQuery()) { QByteArray query = request.d->url.encodedQuery(); ba += "Content-Length: "+ QByteArray::number(query.size()) + "\r\n"; ba += "\r\n"; ba += query; } else { ba += "\r\n"; } } else { ba += "\r\n"; } return ba; }
QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request, bool throughProxy) { QList<QPair<QByteArray, QByteArray> > fields = request.header(); QByteArray ba; ba.reserve(40 + fields.length()*25); // very rough lower bound estimation ba += request.methodName(); ba += ' '; ba += request.uri(throughProxy); ba += " HTTP/"; ba += QByteArray::number(request.majorVersion()); ba += '.'; ba += QByteArray::number(request.minorVersion()); ba += "\r\n"; QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); QList<QPair<QByteArray, QByteArray> >::const_iterator endIt = fields.constEnd(); for (; it != endIt; ++it) { ba += it->first; ba += ": "; ba += it->second; ba += "\r\n"; } if (request.d->operation == QHttpNetworkRequest::Post) { // add content type, if not set in the request if (request.headerField("content-type").isEmpty()) { //Content-Type is mandatory. We can't say anything about the encoding, but x-www-form-urlencoded is the most likely to work. //This warning indicates a bug in application code not setting a required header. //Note that if using QHttpMultipart, the content-type is set in QNetworkAccessManagerPrivate::prepareMultipart already qWarning("content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem."); ba += "Content-Type: application/x-www-form-urlencoded\r\n"; } if (!request.d->uploadByteDevice && request.d->url.hasQuery()) { QByteArray query = request.d->url.query(QUrl::FullyEncoded).toLatin1(); ba += "Content-Length: "; ba += QByteArray::number(query.size()); ba += "\r\n\r\n"; ba += query; } else { ba += "\r\n"; } } else { ba += "\r\n"; } return ba; }
QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request, bool throughProxy) { QList<QPair<QByteArray, QByteArray> > fields = request.header(); QByteArray ba; ba.reserve(40 + fields.length()*25); // very rough lower bound estimation ba += request.d->methodName(); ba += ' '; ba += request.d->uri(throughProxy); ba += " HTTP/"; ba += QByteArray::number(request.majorVersion()); ba += '.'; ba += QByteArray::number(request.minorVersion()); ba += "\r\n"; QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); QList<QPair<QByteArray, QByteArray> >::const_iterator endIt = fields.constEnd(); for (; it != endIt; ++it) { ba += it->first; ba += ": "; ba += it->second; ba += "\r\n"; } if (request.d->operation == QHttpNetworkRequest::Post) { // add content type, if not set in the request if (request.headerField("content-type").isEmpty()) { qWarning("content-type missing in HTTP POST, defaulting to application/octet-stream"); ba += "Content-Type: application/octet-stream\r\n"; } if (!request.d->uploadByteDevice && request.d->url.hasQuery()) { QByteArray query = request.d->url.encodedQuery(); ba += "Content-Length: "; ba += QByteArray::number(query.size()); ba += "\r\n\r\n"; ba += query; } else { ba += "\r\n"; } } else { ba += "\r\n"; } return ba; }