`
Riddick
  • 浏览: 640857 次
  • 性别: 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  
高手,学习一下

相关推荐

    程序员笔记 编程体会

    【程序员笔记 编程体会】是一份集合了个人编程经验与理解的宝贵资源,旨在帮助提升程序员的编程技能和问题解决能力。这份笔记涵盖了作者在编程实践中遇到的问题、解决策略以及对各种编程概念的深入剖析,是提升电脑...

    网络编程学习心得与体会实践

    根据提供的标题、描述、标签及部分内容,我们可以提炼出关于网络编程的一些关键知识点,尤其是在Java环境下的应用。以下是对这些知识点的详细阐述: ### 一、网络编程概述 #### 1.1 概述 网络编程是指利用计算机...

    编程培训心得体会(多篇).doc

    编程培训心得体会 编程培训是一种深度学习和技能提升的过程,它涵盖了多个方面,包括语言学习、实践操作、问题解决和团队协作。以下是从给定的文件中提取出的几个关键知识点: 1. **Java编程**: Java是一种广泛...

    网络课程实验 socket编程实现 http服务器

    在本网络课程实验中,我们将深入探讨如何使用Socket编程来实现一个简单的HTTP服务器。Socket编程是网络编程的基础,它提供了一种低级别的接口,允许应用程序通过网络发送和接收数据。在此实验中,我们重点关注的是...

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

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

    JSP编程(绝对经典的jsp编程经验总结)

    **JSP(Java Server Pages)编程是Web开发领域中一种重要的技术,它允许开发者将静态内容与动态逻辑相结合,以创建交互式的Web应用程序。本文档集合了绝对经典的JSP编程经验,旨在帮助开发者提高技能,解决实际问题...

    SSH项目源码及心得体会

    Struts2是MVC(Model-View-Controller)架构模式的一种实现,主要用于控制应用程序的流程,处理HTTP请求,并将数据传递给视图进行展示。它提供了强大的Action类,用于定义业务逻辑,以及Interceptor拦截器,可以灵活...

    python课程设计报告总结和体会.docx

    在本次的Python课程设计报告中,我体验了Python编程语言的魅力并深化了对它的理解。首先,我们从Python的基础概念和语法结构入手,这是学习任何编程语言的第一步。Python以其简洁明了的语法和强大的功能著称,它支持...

    基于C#编程的网络及数据库应用系统

    例如,生产实习报告中提到的“生产实习的目的”可能涉及系统的需求概述,“实习报告正文”可能涵盖系统的设计和实现过程,“收获和体会”部分则可能包含开发者在项目中学习到的新技术和经验总结。 总的来说,基于C#...

    实验5 服务端编程1

    实验内容部分要展示你完成的功能,心得体会部分则可以分享你在实验过程中遇到的问题、解决方案以及学习新知识的感悟。 在提交内容时,除了实验报告,还需要提供源代码文件,这些文件应能独立运行并展示实验的所有...

    学python心得体会1000字-浅谈我对python的学习感受.pdf

    Python是一种极具潜力的高级编程语言,经过多年的演进,它在编程领域的作用越来越大。学习Python的过程中,我发现Python相比C语言提供了更多的便捷性。在字符串处理方面,Python为程序员提供了极大的便利,无需像...

    VC 网络编程多人在线聊天室

    调用`WSAStartup`函数,传入一个指向`WSADATA`结构体的指针,该结构体会存储关于Winsock版本的信息。在程序结束时,使用`WSACleanup`来释放资源。 2. 创建Socket: 要创建一个Socket,使用`socket`函数,传入协议...

    Go Web编程

    通过参与这本书的编写和分享,开发者们不仅能够学习Go语言的Web开发技术,更能体会到编程社区合作的乐趣和重要性。同时,书籍作者和其他贡献者为这个社区增添了更多资源和活力,使得Go语言在Web开发领域越来越受到...

    面试心得体会

    网络知识也是常考项,如TCP/IP协议栈、HTTP/HTTPS协议、网络安全、Socket编程等。对于云计算和大数据方向的面试,熟悉AWS、Azure或Google Cloud Platform等云服务提供商的产品,以及Hadoop、Spark等大数据处理框架也...

    20151910042-刘鹏-CN实验06-基于SSL的安全通信编程实验1

    实验体会部分未给出,但通常会涉及对SSL协议理解的加深、编程技巧的提升以及遇到的问题和解决方法。 参考文献涵盖了C++编程、Java的IO、NIO和NET相关知识,这些都是实现SSL通信编程时可能需要的基础知识。 总的来...

    python课程设计总结与体会.doc

    例如,利用Python进行网页爬取,我们学习了requests库来发送HTTP请求,BeautifulSoup库解析HTML文档,这为我们提供了获取网络数据的能力。对于数据处理,Pandas库提供了一种高效的数据分析框架,可以方便地进行数据...

    新的体会-struts

    此外,可能还包括对Spring与Struts集成的理解加深,利用AOP(面向切面编程)来处理横切关注点,如日志、事务管理等。 在Struts2版本中,框架引入了更多现代特性,如拦截器(Interceptor),这使得开发者可以更灵活...

    实验3 客户端脚本编程1

    4. 心得体会:分享实验过程中的体验、遇到的问题及解决方法,以及对所学知识的理解和应用。 提交内容应包括实验报告文档和源文件(ex2-1.htm和ex3-2.html)。通过这个实验,你不仅会熟悉VS Code的使用,还能深入...

Global site tag (gtag.js) - Google Analytics