2

c++ Qt を使用して投稿リクエストを作成しようとしています。
ターゲット サイトは http://www.artlebedev.ru/tools/decoder/advanced/
です。サイトは次のようになります。 ここに画像の説明を入力

ブラウザで調べました。
そして、私にとって奇妙なことが1つあります-ヘッダーの乱数です。
そのため、投稿リクエストのデータを正しく送信できるかどうかはわかりません。

ここに画像の説明を入力

彼らは何のためにそれをしたのですか?私はリクエストを次のように行います(ブラウザが行うように):

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

答えのウェブページを取得します。しかし、その Web ページにはデコードされた文字列が含まれていません。空の刺し傷のみ。
それはそう見える: ここに画像の説明を入力

投稿リクエストを行うのはこれが初めての試みです。方法を見つけるのを手伝ってください。

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 に答える