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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值