关于QHttp编程的一些笔记(转)

本文详细介绍了在QT框架中使用QHttp进行HTTP请求的方法,包括设置请求头(如GET、POST)、请求头变量(如COOKIE、USER_AGENT)以及编码方式(multipart/form-data和application/x-www-form-urlencoded)。同时,文章提及了QHttpResponseHeader类如何处理应答头,以及QHttp的请求队列管理和错误处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于QHttp编程的一些笔记(转)

遇到两个个博客的发送都是使用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): 已有数据可读,如果数据很多,可能会发送多次信号.

 

 

原文地址:http://blog.myspace.cn/e/400080596.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值