Qt中使用QHttp连接网站服务器,并传递参数(使用QHttp::request()函数实现)
来源:互联网 发布:网络交易中间商 模式 编辑:程序博客网 时间:2024/06/05 10:47
Qt里提供QHttp实现Qt代码与Http服务器通信,提供GET、POST两种发送请求的方式,做过网站的同学们应该知道,前者用于传递少量数据,而后者用于传递大量数据,多大呢?应该是大于1024个字符吧~比如100+KB或1MB+以上算是比较大了!
但是,如QHttp详解所讲,QHttp原生提供的get和post函数不能传递参数,只能单纯的访问页面,不能向页面传递参数,可以说功能是非常简单的。
为了向服务器传递参数,我知道的有两种方式:
一、使用QNetworkAccessManager代替QHttp访问http服务器,QNetworkAccessManager是QHttp的一个更高层次的封装,用起来非常简单。可以参考Qt官网上的实例。
二、坚持使用QHttp,但是要使用request函数发送http请求,而不是get或post函数。我这里主要讲下这种方法^_^
request函数需要一个QHttpRequestHeader,有的还需要一个QByteArray参数用于存放要向服务器发送的参数,这倒不是主要的。主要的是这个QHttpRequestHeader怎么设置!
直接上代码:
1、使用GET方式,通过request函数向服务器传递参数
QHttpRequestHeader header("GET", "/MyWebApp/MyJsp.jsp?code=1&account=10&pwd=12");//需要传递的参数直接写在path中header.setValue("Host", "127.0.0.1");//必须设置主机IP或名字QHttp http;http.setHost("127.0.0.1",8080);//给QHttp设置主机IP和端口号int http_request_id=http.request(header);//发送请求http.close();//关闭请求,建议关上,因为close后,会flush输出缓冲区~
2、使用POST方式,通过request函数向服务器传递参数
QHttpRequestHeader header("POST", "/MyWebApp/MyJsp.jsp");//只设置页面的路径path,待发送的参数不能写在这里!header.setValue("Host", "127.0.0.1");header.setContentType("application/x-www-form-urlencoded");//必须设置!QHttp http;http.setHost("127.0.0.1",8080);//给QHttp设置主机IP和端口号int http_request_id=http.request(header,QString("code=1&account=10&pwd=12").toUtf8());//发送请求,注意,这里要使用需要QByteArray参数的request函数重载版本,用于向服务器发送参数http.close();//关闭请求,建议关上,因为close后,会flush输出缓冲区~
好了,我们会发现,GET方式的参数是在页面的path中掺杂出现的;而POST方式的参数是在QHttp::request()函数执行时单独添加的,特别要注意的是,如果使用POST方式传递参数,一定要记得设置ContentType为“application/x-www-form-urlencoded”,否则服务器端找不到这些参数!
正文完。
我是折腾了一下午+一晚上才搞明白的,希望对大家有所帮助!
以下是些参考资料:
1、HTTP请求(GET与POST区别)和响应(对Get和Post讲得很透彻)
2、Qt发送HTTP请求(个人感觉,这篇博文非常好!)
3、QHttp编程的体会(算是个扩展阅读)
- Qt中使用QHttp连接网站服务器,并传递参数(使用QHttp::request()函数实现)
- Qt中使用QHttp连接网站服务器,并传递参数
- Qt中调用QHttp类出错
- Qt类Qhttp
- 使用qftp或者qhttp下载文件
- QT QHttp 访问 WEBSERVICE 范例
- QT QHttp 访问 WEBSERVICE 范例
- 关于Qt中QNetworkAccessManager如何取代QHttp的问题
- 使用QHttp下载网络文件的简单例子
- QHttp相关
- QHTTP详解
- QHttp详解
- 关于QHttp
- QT Http GET POST QHttp详解
- 如何用QHttp实现同步服务
- 发现QHttp一个bug
- QHttp realize breakpoint continuingly
- 在Action中使用request接收Struts2传递的参数
- pacs
- linux下apache tomcat ajp_proxy 负载均衡+集群+session 复制
- 迭代器特性
- jquery 实现左右下拉列表 选项 移动
- MySQL性能调优之Memory or SSD?
- Qt中使用QHttp连接网站服务器,并传递参数(使用QHttp::request()函数实现)
- linux下nginx tomcat 整合,负载均衡配置
- Discuz!NT中集成Memcached分布式缓存
- res\drawable-ldpi\default.png:0: error: invalid symbol: 'default'
- 我的OpenCV学习笔记(二):操作每个像素
- 不同系统下的换行符
- jquery1.4.2 源文件
- 初用xilinx EDK10.1的XMD遇到的一些问题
- Ubuntu 12.04快捷键变化