分析QNetworkAccessManager的時候,有一段設定HTTP的請求包的Header,當時沒進行深入的分析。
void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair)
{
QHttpNetworkRequest &request = messagePair.first;
QHttpNetworkReply *reply = messagePair.second;
// add missing fields for the request
QByteArray value;
// check if Content-Length is provided
QIODevice *data = request.data();
if (data && request.contentLength() == -1) {
if (!data->isSequential())
request.setContentLength(data->size());
else
bufferData(messagePair); // ### or do chunked upload
}
// set the Connection/Proxy-Connection: Keep-Alive headers
#ifndef QT_NO_NETWORKPROXY
if (networkProxy.type() == QNetworkProxy::HttpCachingProxy) {
value = request.headerField("proxy-connection");
if (value.isEmpty())
request.setHeaderField("Proxy-Connection", "Keep-Alive");
} else {
#endif
value = request.headerField("connection");
request.setHeaderField("Connection", "Keep-Alive");
// If the request had a accept-encoding set, we better not mess
// with it. If it was not set, we announce that we understand gzip
// and remember this fact in request.d->autoDecompress so that
// we can later decompress the HTTP reply if it has such an
// encoding.
value = request.headerField("accept-encoding");
if (value.isEmpty()) {
#ifndef QT_NO_COMPRESS
request.setHeaderField("Accept-Encoding", "gzip");
request.d->autoDecompress = true;
#else
// if zlib is not available set this to false always
request.d->autoDecompress = false;
// set the User Agent
value = request.headerField("user-agent");
if (value.isEmpty())
request.setHeaderField("User-Agent", "Mozilla/5.0");
// set the host
value = request.headerField("host");
QByteArray host = QUrl::toAce(hostName);
int port = request.url().port();
if (port != -1) {
host += ':';
host += QByteArray::number(port);
}
request.setHeaderField("Host", host);
reply->d_func()->requestIsPrepared = true;
}
如果想模拟IE浏覽器,或者想修改成任何你希望的資訊,就是在這裡修改。
在設定了這些請求資訊之後,發送的請求資訊包是什麼樣子的呢?我把工具攔截的資訊包具體情況貼出來:
<a href="http://img245.ph.126.net/M3QJZ0H3fOWN7lMkqpUv3Q==/2110217900400898473.jpg"></a>