2012-11-15 5 views
2

나는 C++ Qt를 사용하여 게시물 요청을하려고합니다.
대상 사이트는 사이트 그렇게 보이는 http://www.artlebedev.ru/tools/decoder/advanced/
입니다 : enter image description here게시물 요청 분석

나는 브라우저를 검사.
그리고 저에게는 이상한 것이 하나 있습니다 - 머리말에 임의의 숫자가 있습니다.
그래서 게시 요청에 대한 데이터를 올바르게 전송하는지 여부는 확실하지 않습니다.

enter image description here

그들이 그것을 무엇을 위해 짓을 한거야? (브라우저처럼) 나는 나의 요청합니다

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"); 

내가 대답 웹 페이지를 얻을. 그러나 해당 웹 페이지에는 디코딩 된 문자열이 포함되어 있지 않습니다. 비어있는 독침 만.
외모가 이렇게 보입니다. enter image description here

이것은 첫 번째 시도로서 요청을 게시합니다. 나가는 길을 찾도록 도와주세요.

답변

2

임의 값은 사람이 수행하려는 것을 수행하지 못하도록하기 위해 일종의 Cross-site request forgery 토큰처럼 보이지만 실제로 사용되지는 않습니다. 쿠키 또는 임의 값을 사용하지 않고 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 

그래서 귀하의 요청에 뭔가 잘못이 있어야한다, 나는 그냥 코드로 외부 뷰어에서 요청을 copypasted하지 말았어야 생각하지만 보았다 :

사실,이 요청은하지 당신이하는 일 :

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

이것은 HTTP 헤더가 아닙니다. 서버가 400 Bad Request으로 응답하지 않는 것이 좋습니다. 그 줄의 자리에 있어야 할 것은 엔터티 ('요청 본문')에서 헤더를 분리하는 단일 CRLF입니다.

postdata의 내용을 보내기 직전에 출력하여 잘못된 것을 볼 수 있다면 유용 할 수 있습니다.

사이트에서 수행 할 수있는 인코딩 변환이 마음에 드신다면 (또는 무엇이든지간에) 인코딩 된 번역을 좋아한다면 공개적으로 사용할 수있는 API가 있는지 여부를 물어볼 수도 있습니다. 그러한 전환을 스스로 재현 할 수 있도록 코드를 공유하거나 귀중한 자원으로 안내하십시오.

+0

당신은 내 눈을 열었습니다. 특히 Fiddler는 어떻게 작동하는지 이해하고보고하는 데 매우 유용한 도구입니다. – Tebe