标题:Qt4.8 如何组建正确HTTP post请求数据包?
作者:misgn
日期:2016-07-13 13:32
内容:
先把自己的问题写出来。
首先源码是这个:
manager = new QNetworkAccessManager();
QByteArray dataByteArray("{\"grant_type\":\"authorization_code\",\"client_id\":\"32u2w95f20D4d27\",\"client_secret\":\"37vH35Eg028PHZz\",\"redirect_uri\":\"http://www.163.com\",\"code\":\"43c1c3e437e5542025936277d050b4\"}");//在这里填写JSON的原始数据,按照JSON的格式来写。
QUrl url("http://kk.bigk2.com:8080/KOAuthDemeter/accessToken");
QNetworkRequest request(url);
//设置头部有关信息
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader,dataByteArray.size ());
manager->post(request,dataByteArray);
难道还需要配置什么?
为什么使用Fiddler抓不到包呢?难道是因为发送的HTTP数据包不符合格式而丢弃或不处理。那怎么按什么样的格式发送HTTP请求呢?
#1 [江南烟雨梦 07-13 15:58]
if ( m_pNetworkManager == NULL ) return false;
QNetworkRequestnetworkRequest;
networkRequest.setUrl( QUrl( WEB_URL + strUrl ) );
networkRequest.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( "application/json" ) );
if ( !m_pUser->m_strToken.isEmpty() )
networkRequest.setRawHeader( QByteArray( "Auth-Token" ), m_pUser->m_strToken.toUtf8() );
networkRequest.setRawHeader( QByteArray( "Client-Version" ), QByteArray( "1" ) );
QNetworkReply *pReply = m_pNetworkManager->post( networkRequest, strJson.toUtf8() );
SyncHttp();
if ( pReply == NULL || QNetworkReply::NoError != pReply->error() )
{
qDebug() errorString();
m_strError = pReply->readAll().data();
return QString( "" );
}
//返回的数据
QString strR = pReply->readAll().data();
pReply->deleteLater();
return strR;
#2 [江南烟雨梦 07-13 16:00]
其中SyncHttp是自定义的函数,用来同步阻塞等待post返回结果。
#3 回 江南烟雨梦 的帖子 [misgn 07-13 18:23]
江南烟雨梦:其中SyncHttp是自定义的函数,用来同步阻塞等待post返回结果。 (2016-07-13 16:00)
感谢江南的回复,现在在发现。原来是服务器接受的格式是form的格式。
#4 回 江南烟雨梦 的帖子 [misgn 07-13 18:25]
江南烟雨梦:if ( m_pNetworkManager == NULL ) return false;
QNetworkRequest networkRequest;
networkRequest.setUrl( QUrl( WEB_URL + strUrl ) );
networkRequest.setHeader( QNetworkR .. (2016-07-13 15:58)
一个新的问题,请教一下。
setHeader和setRawHeader的区别在哪里?虽然文档上有介绍。但是有些模糊。
只知道setHeader设置的HTTP数据包的原始头部。
但setRawHeader中的Raw不也是原始的意思吗?
#5 [江南烟雨梦 07-13 21:50]
setHeader用于设置标准的HTTP头,setRawHeader用于设置自定义的HTTP头,我是这样理解的。
我上面的例子中,Auth-Token和Client-Version就是我自定义的HTTP头。