2

我正在尝试使用 c++ Qt 发出发布请求。
目标站点是 http://www.artlebedev.ru/tools/decoder/advanced/
该站点看起来是这样的: 在此处输入图像描述

我用浏览器检查了它。
对我来说有一件奇怪的事情 - 标题中的随机数。
所以,我不确定我是否正确发送了发布请求的数据。

在此处输入图像描述

他们这样做是为了什么?我提出我的要求(就像浏览器一样):

postdata.append("accept:*/*&");
postdata.append("accept-charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3&");
postdata.append("Accept-Encoding:gzip,deflate,sdch&");
postdata.append("Accept-Language:en-US,en;q=0.8&");
postdata.append("Connection:keep-alive&");
postdata.append("Content-Length:36&");
postdata.append("Content-Type:application/x-www-form-urlencoded&");
postdata.append("Cookie:__utma=1.904416008.1352897318.1352905816.1352909441.3; __utmc=1; __utmz=1.1352897318.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __atuvc=7%7C46&");
postdata.append("Host:www.artlebedev.ru&");
postdata.append("Origin:http://www.artlebedev.ru&");
postdata.append("Referer:http://www.artlebedev.ru/tools/decoder/advanced/&");
postdata.append("User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11&");
postdata.append("X-Requested-With:XMLHttpRequest&");
postdata.append("random:0.9632773566991091&"); // I have no idea about this number
postdata.append("Form Dataview URL encoded&");
postdata.append("csin:0&");
postdata.append("csout:0&");
postdata.append("text:fvddas&");
postdata.append("Decode:go");

我得到网页的答案。但该网页不包含解码字符串。只有空刺。
看起来是这样的: 在此处输入图像描述

这是我第一次尝试发帖请求,请帮我找到出路。

4

1 回答 1

2

随机值看起来像某种跨站点请求伪造令牌,以防止人们做你想做的事情,但实际上并没有被使用。如果我在没有任何 cookie 或随机值的情况下使用 Fiddler 重新发出请求,请求仍然成功。

事实上,这个请求也做了:

POST http://www.artlebedev.ru/tools/decoder/advanced/ HTTP/1.1
Host: www.artlebedev.ru
Content-Type: application/x-www-form-urlencoded
Content-Length: 33

csin=0&csout=0&text=foo&Decode=go

所以你的请求一定有问题,我想你不应该只是将外部查看器的请求复制粘贴到代码中,而是看看你在做什么:

postdata.append("Form Dataview URL encoded&");

这不是 HTTP 标头。服务器不响应400 Bad Request. 该行的位置应该是单个 CRLF,用于将标头与实体(“请求正文”)分开。

postdata如果您在发送之前输出它的内容,以查看您是否发现有问题,这可能会很有用。

或许如果您喜欢该站点可以执行的编码转换(或其他任何功能),您可以询问该站点的创建者是否有您可以解决的公开可用的 API,或者他们甚至会共享一些代码或将您指向宝贵的资源,以便为自己重新创建这样的转换。

于 2012-11-15T19:00:00.187 回答