我正在尝试使用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");
我得到网页回答。但该网页不包含已解码的字符串。只有空蜇。
看起来如此:
这是我第一次发帖请求,请帮我找个出路。
答案 0 :(得分:2)
随机值看起来像某种Cross-site request forgery令牌,以防止人们做你想做的事情,但它实际上没有被使用。如果我使用Fiddler重新发出请求而没有任何cookie或随机值,则请求仍然成功。
事实上,这个请求也有:
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,或者他们甚至可以分享一些代码或指向宝贵的资源,为自己重建这样的转换。