遇到两个博客的发送都是使用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): 已有数据可读,如果数据很多,可能会发送多次信号
分享到:
相关推荐
【程序员笔记 编程体会】是一份集合了个人编程经验与理解的宝贵资源,旨在帮助提升程序员的编程技能和问题解决能力。这份笔记涵盖了作者在编程实践中遇到的问题、解决策略以及对各种编程概念的深入剖析,是提升电脑...
根据提供的标题、描述、标签及部分内容,我们可以提炼出关于网络编程的一些关键知识点,尤其是在Java环境下的应用。以下是对这些知识点的详细阐述: ### 一、网络编程概述 #### 1.1 概述 网络编程是指利用计算机...
编程培训心得体会 编程培训是一种深度学习和技能提升的过程,它涵盖了多个方面,包括语言学习、实践操作、问题解决和团队协作。以下是从给定的文件中提取出的几个关键知识点: 1. **Java编程**: Java是一种广泛...
在本网络课程实验中,我们将深入探讨如何使用Socket编程来实现一个简单的HTTP服务器。Socket编程是网络编程的基础,它提供了一种低级别的接口,允许应用程序通过网络发送和接收数据。在此实验中,我们重点关注的是...
下面是他对自己写得书的心得和体会。我尽量把资源分弄的比较低。5分应该不多吧。 从2011年4月写下第一篇至今,编程艺术系列已经写了37章,也就是说详细阐述了37个编程问题,在创作的过程当中,得到了很多朋友的支持...
**JSP(Java Server Pages)编程是Web开发领域中一种重要的技术,它允许开发者将静态内容与动态逻辑相结合,以创建交互式的Web应用程序。本文档集合了绝对经典的JSP编程经验,旨在帮助开发者提高技能,解决实际问题...
Struts2是MVC(Model-View-Controller)架构模式的一种实现,主要用于控制应用程序的流程,处理HTTP请求,并将数据传递给视图进行展示。它提供了强大的Action类,用于定义业务逻辑,以及Interceptor拦截器,可以灵活...
在本次的Python课程设计报告中,我体验了Python编程语言的魅力并深化了对它的理解。首先,我们从Python的基础概念和语法结构入手,这是学习任何编程语言的第一步。Python以其简洁明了的语法和强大的功能著称,它支持...
例如,生产实习报告中提到的“生产实习的目的”可能涉及系统的需求概述,“实习报告正文”可能涵盖系统的设计和实现过程,“收获和体会”部分则可能包含开发者在项目中学习到的新技术和经验总结。 总的来说,基于C#...
实验内容部分要展示你完成的功能,心得体会部分则可以分享你在实验过程中遇到的问题、解决方案以及学习新知识的感悟。 在提交内容时,除了实验报告,还需要提供源代码文件,这些文件应能独立运行并展示实验的所有...
Python是一种极具潜力的高级编程语言,经过多年的演进,它在编程领域的作用越来越大。学习Python的过程中,我发现Python相比C语言提供了更多的便捷性。在字符串处理方面,Python为程序员提供了极大的便利,无需像...
调用`WSAStartup`函数,传入一个指向`WSADATA`结构体的指针,该结构体会存储关于Winsock版本的信息。在程序结束时,使用`WSACleanup`来释放资源。 2. 创建Socket: 要创建一个Socket,使用`socket`函数,传入协议...
通过参与这本书的编写和分享,开发者们不仅能够学习Go语言的Web开发技术,更能体会到编程社区合作的乐趣和重要性。同时,书籍作者和其他贡献者为这个社区增添了更多资源和活力,使得Go语言在Web开发领域越来越受到...
网络知识也是常考项,如TCP/IP协议栈、HTTP/HTTPS协议、网络安全、Socket编程等。对于云计算和大数据方向的面试,熟悉AWS、Azure或Google Cloud Platform等云服务提供商的产品,以及Hadoop、Spark等大数据处理框架也...
实验体会部分未给出,但通常会涉及对SSL协议理解的加深、编程技巧的提升以及遇到的问题和解决方法。 参考文献涵盖了C++编程、Java的IO、NIO和NET相关知识,这些都是实现SSL通信编程时可能需要的基础知识。 总的来...
例如,利用Python进行网页爬取,我们学习了requests库来发送HTTP请求,BeautifulSoup库解析HTML文档,这为我们提供了获取网络数据的能力。对于数据处理,Pandas库提供了一种高效的数据分析框架,可以方便地进行数据...
此外,可能还包括对Spring与Struts集成的理解加深,利用AOP(面向切面编程)来处理横切关注点,如日志、事务管理等。 在Struts2版本中,框架引入了更多现代特性,如拦截器(Interceptor),这使得开发者可以更灵活...
4. 心得体会:分享实验过程中的体验、遇到的问题及解决方法,以及对所学知识的理解和应用。 提交内容应包括实验报告文档和源文件(ex2-1.htm和ex3-2.html)。通过这个实验,你不仅会熟悉VS Code的使用,还能深入...