`
Riddick
  • 浏览: 632889 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

QHttp编程的体会

    博客分类:
  • Qt
阅读更多

遇到两个博客的发送都是使用cookie来标识用户的:my.opera.com以及myspace.

 

请求头

请求头类: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): 已有数据可读,如果数据很多,可能会发送多次信号

分享到:
评论
1 楼 ld57601870 2010-09-03  
高手,学习一下

相关推荐

    程序员编程艺术第一~三十七章集锦

    下面是他对自己写得书的心得和体会。我尽量把资源分弄的比较低。5分应该不多吧。 从2011年4月写下第一篇至今,编程艺术系列已经写了37章,也就是说详细阐述了37个编程问题,在创作的过程当中,得到了很多朋友的支持...

    Tcl_TK编程权威指南pdf

    我有幸一直参与Tcl核心技术的开发活动,希望通过本书能够将自己使用Tcl时获得的切身体会表达出来。 为什么要使用Tcl 作为一种脚本语言,Tcl与其他的Unix shell语言,如Bourne Shell(sh)、C Shell(csh)、Korn Shell...

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    [14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup...

    [14本经典Android开发教程]-9-Android2.3用户手册

    [14本经典Android开发教程] 8 Linux内核阅读心得体会 http: download csdn net detail cleopard 8391591 剩余8本稍后上传 @或直接从这里寻找@ http: download csdn net user cleopard album @更多@ ...

    vc++贪吃蛇游戏设计

    1.1 编写体会 孔夫子说过:“学然后知不足”。当宋老师提出将小游戏作为我们分析设计程序的主题后,我特别高兴,因为我正是一个喜欢玩游戏的学生,而且我知道只有在实际的学习编码中才能提高技术。正因为喜欢玩...

    c#学习笔记.txt

    51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct identifier [:interfaces] body [;] 结构与类很相似,都表示可以包含数据成员和函数成员的数据结构。与类...

    编码的奥秘(完全版)1

    此外,本书还涉及到计算机系统、操作系统、编程语言等的产生及发展,甚至对计算机图形化的相关技术也给了一个全面的描述。阅读本书,相信您会从它图文并茂的编排组织,通俗风趣的语言文字、简练丰富的背景知识中体会...

    VC 视频教程1

    目的是能帮助大家快速入门,如果你觉得本视频对你有帮助,可以将你的学习心得、体会、建议等发送到contact@mybole.com.cn,也可去中心的留言板留言:http://www.mybole.com.cn/gst/gst_index.asp。 本教学视频不得...

    Thingking C++

    图书类型:pdf 本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省...

    C/C++程序设计学习与实验系统

    记录教程中的重点、难点、学习心得体会,针对用户学习教程中遇到的问题开通了疑难问题解答论坛等,同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计...

    【漫画】程序员的工作:百思不得其解的bug

    从我这么多年的编程经历中,我深深体会到一条真理,越是挠破头皮,百思不得其解的bug,越有可能是最愚蠢而简单的bug。  从我这么多年的编程经历中,我深深体会到一条真理,越是挠破头皮,百思不得其解的bug,越有...

    cms v1.0正式版MSSQL源码2012711

    DTcms之所以开源,最大原因在于国内ASP.NET(c#)开源软件成品太少,相信刚接触编程开发者都跟我一样有很深的体会,书本上的知识很有限,学习的过程中都是一些比较简单的基础知识,偶然发现一个比较成熟的案例,要么...

    AIC的Java课程1-6章

    AIC的学费很贵,半年18000元,大家看看他们教些什么内容吧 <br>他们学校的网址http://www.aicsws-sjtu.com/<br><br>此内容是Java第1到第六章的PPT,希望大家喜欢 <br>如果大家觉得好我继续发 <br>课程定位...

    日期处理的js库(迷你版)–自建js库总结

    js建库准则 js建库准则(Dean Edwards在开发base2时候的一些体会)翻译版:http://biaoge.me/2009/12/239 js建库学习好地方:http://ejohn.org/blog/building-a-javascript-library/ 假如你有时间,再看一个

    cmake 基础教程 多平台工程构建工具

    3,cmake跟已有体系的配合并不是特别理想,比如pkgconfig,您在实际使用中会有所体会,虽然 有一些扩展可以使用,但并不理想。 4,个人的建议: 1,如果你没有实际的项目需求,那么看到这里就可以停下来了,因为...

    《Web应用技术》实验

    问题及体会 1.学会了一些比较简单的JSP编程,和写一些代码 2,知道了request的用法和其使用的原理,即是提交用户信息 3.知道JAVA片段的书写方式和技巧 4.对注册页面有了一定程上的了解并编程。

    iPhone开发基础教程电子书

    :)),当然还有我自己的一些心得和体会。总之,希望我们能够共同学习,一起进步。开发属于自己的游戏! 补充一点:www.ipadev.org,国人办的,这个网站相当不错!给大家推荐一下,上面有斯坦福大学iphone开发...

    毕业设计论文范文源码-FlowGeek:开源中国MVP

    毕业设计论文范文源码 #FlowGeek FlowGeek是基于MVP架构的、遵循Material Design设计规范的开源中国社区...:Java的响应式编程的库,相当强大且相当赞!!推荐大家深入到源码,体会设计的强大。 :优雅的HTTP请求开源

    基于web的bbs系统

    编程环境: WinXP + IIS5.1 + ASP 软件授权: 免费 软件大小: 387KB 网站地址: http://www.YimXu.com 管理员:admin 密码:admin ------------------------------------安装说明--------------------...

Global site tag (gtag.js) - Google Analytics