QT Http GET POST QHttp详解
请求头
请求头类:QHttpRequestHeader
设置请求方式(get/post)
QHttpRequestHeader::setRequest ("POST", "请求地址"); //post
QHttpRequestHeader::setRequest ("GET", "请求地址"); //get
请求地址可以不包含Host名称
设置请求头:
void QHttpRequestHeader::setValue(const QString & key, const QString & value)//各个变量设置 void QHttpRequestHeader::setValues ( const QList<QPair<QString, QString> > & values )//批量设置
编码
发送的内容编码有两种
multipart/form-data application/x-www-form-urlencoded application/x-www-form-urlencoded
使用的是URL编码,在QT中使用以下code来完成转换:
QByteArray afterData = QUrl::toPercentEncoding (befData, “&=”);
befData是未转换之前的数据,函数返回的是转换后的QByteArray类型的编码。
除了大小写字母以外的所有符号都使用%n的方式表示(n为字符的两位编码)
使用QHttpRequestHeader::setValue (“content-type”, “application/x-www-form-urlencoded”);设置请求头
multipart/form-data
使用类似以下格式的代码进行传输:
--BlogDiary2007 Content-Disposition: form-data; name="表单控件名称"
数据
--BlogDiary2007 Content-Disposition: form-data; name="表单控件名称"
数据
–BlogDiary2007–
BlogDiary2007是各数据间的分割符,每一部分前面加上两个”–”,整个表单数据完成后面再加”–”表示完成。
BlogDiary2007并不是特定的,但必须与你的请求头变量的相一致。
QHttpRequestHeader::setValue ("content-type", "multipart/form-data; boundary=BlogDiary2007");
一些用过的请求头变量
变量 值
COOKIE: COOKIE数据
HOST(此变量是必须的): 网站的HOST地址
USER_AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
不知道为何,USER_AGENT在myspace登陆时是必须的,弄得头崩额劽加上这个才弄好。只是标志客户端的版本而已呀,难道登陆myspace需要知道我用什么浏览器吗?不知道我改成BlogDiary会怎么样。
应答头
应答头类:QHttpResponseHeader
返回的值通过QHttpResponseHeader::value (“变量”);获得
应答头的cookie的值为”set-cookie:cookie值”,意为请求客户端设置,我登陆博客就是通过这个取得登陆身份的。
QHttp
声明:QHttp http = new QHttp (“远端服务器的Host名称”);
向服务器请求数据:int QHttp::request (请求头,发送数据);//返回请求ID
返回当前的ID(接收到数据后):int QHttp::currentID ();
QHttp的请求方式类似于打印机的打印机队列一样,可以同时发送多个请求,但真正发送是按队列先后的方式发送请求。在接收到应答头后从当前ID(QHttp::currentID())知道是哪个请求返回的数据。
获得数据的长度(接收到数据后):int QHttp::bytesAvailable ();
应该与应答头的Content-Length的值一样,没验证过,但要注意的是此值可能并不是返回数据的整个大小,因为服务器可能不是一次能够发送完所有数据。
读取数据:read (读取数据缓冲, 上面bytesAvailable ()返回的大小);
获取错误:QHttp::Error QHttp::error ()
信号
请求数据后,当有数据进来后将会发送若干个信号提示服务器返回结果,使用对应Slot函数进行处理。
responseHeaderReceived (const QHttpResponseHeader& resp): 应答头已返回,可从返回的头获取应答信息
requestFinished(int id, bool error): 请求完成,error==true说明有错误发生,QHttp::error ()返回错误代码
readyRead (const QHttpResponseHeader& resp): 已有数据可读,如果数据很多,可能会发送多次信号
SatSun Studio 官方推荐文章
- Windows 7 中文旗舰版 注册机 (特别推荐)
- QT tableView 数据分页 ||分页控件 (特别推荐)
- QT QComboBox||下拉框 动态数据源[setModel][QCompleter] 解决方案 (特别推荐)
- Qt4小技巧——QTextEdit自动滚屏 (特别推荐)
- QT工程中使用图片的三种方法 (特别推荐)
- 【技术应用】Qt程序的退出逻辑 (特别推荐)
- QT 中文CRM || QT 中文入门示例 (特别推荐)
- 深入理解信号槽 (特别推荐)
- 深入理解信号槽-II (特别推荐)
- Qt: 打印 || Qt导出PDF (特别推荐)
- QT使用QHttp&QHttpRequestHeader GET POST数据 (RANDOM - 特别推荐)






![QT [中文]系统托盘图标的示例](http://www.satsuns.com/wp-content/uploads/2010/12/satsunsMenu.jpg)
没研究过这玩意