• 11760阅读
  • 8回复

继续关于qhttp的post讨论 [复制链接]

上一主题 下一主题
离线5706046
 

只看楼主 倒序阅读 楼主  发表于: 2009-07-08
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
前面站长达达已经彻夜分析了这个问题,但是显然是有弊端的.
1,他针对是本地的某个网页,而且这个网页很简单.想想别的大型网站或者正规点的网站,都是好几个元素
2,他针对是php,别的语言是不是也是这样呢.
以上评价仅供进一步探讨,不对站长达达进行任何的人身的攻击.同时还希望站长达达在百忙之中抽出时间来指点一二.
以上就当我抛砖,还望各位高手将自己的玉献出来.
离线5706046

只看该作者 1楼 发表于: 2009-07-08
找了很多尝试,但是没有成功.
有两个问题需要进一步探讨:
1提交表单之前,是否需要获取cookie
2提交表单时,对那些hidden的是否还需要提交;对于设置为空的如何提交.
离线shiroki

只看该作者 2楼 发表于: 2009-07-08
百思不得其解。。你这里自言自语在研究什么问题啊?
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线5706046

只看该作者 3楼 发表于: 2009-07-09
用firebug与firefox可以配合使用,截取你post时提交的数据表单.Wireshark更加强大,但还没用.
离线hendry
只看该作者 4楼 发表于: 2009-08-22
应该使用QNetworkAccessManager 来POST
但是文档里面对 这个类的post方法介绍得太不详细了
cookie的问题可以用QNetworkAccessManager的cookieJar 来解决还是很方便的

只是他的post函数原型
QNetworkReply * QNetworkAccessManager::post ( const QNetworkRequest & request, const QByteArray & data )

这里面的 第二个参数 data 的格式只字不提

简直不知道怎么构造, 查了好久的GOOGLE找到的几个例子里面也是直接构造这个data  没有具体说是什么结构, 而且是传文件
自己也测试了下 最后还是post失败

也用Wireshark抓包分析了, 用IE提交的包和QNetworkAccessManager  post的包结构不一样 因为我的测试服务端是需要cookie的  IE提交的数据, 抓到的包里面看不到cookie 居然web程序正常,  cookiejar方式 post的数据包里 可以显示看到cookie , 只是不知道为什么不成功, 可能是因为  这个data的数据格式问题

我是参看的这两篇文章
http://www.qtcentre.org/forum/f-qt-programming-2/t-file-upload-using-qnetworkrequest-qnetworkaccessmanager-17564.html
http://www.tuckdesign.com/sources/Qt

  
大家有兴趣如何用QNetworkAccessManager  post数据的话, 可以研究下

哪位高手成功了的话 不妨贴出来大家学习下
离线hendry
只看该作者 5楼 发表于: 2009-08-23
针对POST数据    用QNetworkAccessManager 还是比较方便的
前面的时候我自己的代码有点小失误所以一直没有成功

比如要POST一个FORM的数据  并带cookie
具体的做法是这样的

新建一个manager 并对这个manager初始化cookiejar   来get表单    这样get表单后  cookie 会存放在cookiejar 里面
后面我们用manager 来POST数据的时候这个cookie会自动提交到web服务器端


manager = new QNetworkAccessManager();
QNetworkRequest request;
url = QUrl("http://testdomain:port/path");
request.setUrl(url);
request.setRawHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)");
jar = new QNetworkCookieJar;
manager->setCookieJar(jar);
QNetworkReply  *reply =  manager ->get(request);
connect(reply, SIGNAL(finished()), this, SLOT(slotGetFinished()));


这样当GET完毕后  在slotGetFinished 里面我们把得到的表单数据提取并显示在自己的应用程序里面
让别人来输入  这部分就不写了


当输入数据完成后, 我们看POST
void myclass::postData(QString str) {

       QNetworkRequest req;
       QUrl postUrl =  QUrl("your post url");
       req.setUrl(postUrl);
      manager->post(req,QByteArray(QString("txt=" + str).toAscii()));
}

   可以看到这个POST部分其实很简单 , manager这个指针其实就是我们前面get这个表单时候的指针,并且已经有cookiejar来自动处理cookie了, 所以只需要指定post什么数据到posturl 就OK了
离线qhhndaye888

只看该作者 6楼 发表于: 2011-04-18
回 5楼(hendry) 的帖子
request.setRawHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)");
这里面的格式是怎样的啊?
离线cnman
只看该作者 7楼 发表于: 2011-08-20
我也post文件失败了  。。。。。。
离线toby520

只看该作者 8楼 发表于: 2011-10-18
POST到一个url,没反应
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
快速回复
限100 字节
 
上一个 下一个