-2

私は Delphi XE4 を使用しており、通常は IdHttp.POST で Indy を使用して Web サイトへの POST リクエストを行います。

今回は、リクエストを POST しようとするたびに取得しますError: Your browser is not sending the correct data.

私は正しいデータを投稿していると確信しており、IOHandler と CookieManager を使用しています。

これを何日も扱ってきました(文字通り)

コードは次のとおりです(コード内のサイト):

procedure TForm1.Button1Click(Sender: TObject);
var s, lge, Kf1, Kf2, Kf3, Kf4 : String;
    lParam                     : TStringList;
begin
  S := http.Get('https://www.neobux.com/m/l/');
  Memo1.Lines.Add(S);
  getParamLge(s,lge,'lge');
  GetInput(s,Kf1,'id="Kf1"');
  GetInput(s,Kf2,'id="Kf2"');
  GetInput(s,Kf3,'id="Kf3"');
  GetInput(s,Kf4,'id="Kf4"');


  lParam := TStringList.Create;
  lParam.Add('lge='+lge);
  lParam.Add(Kf1+'=USERNAME');
  lParam.Add(Kf2+'=PASSWORD');
  lParam.Add(Kf3+'=');
  lParam.Add(Kf4+'=');
  lParam.Add('login=1');


  memo1.Lines.Add(http.Post('https://www.neobux.com/m/l/', lParam));
end;

(getParamLge および GetInput 関数は、GET 応答から値を抽出する単純なコピーおよび pos 関数です)。

おそらくCookieが必要だと思ったので、最初にこれを追加しました:

  Cookie.CookieCollection.Clear;
  Cookie.CookieCollection.AddClientCookies('CFID=21531887; CFTOKEN=20369251; dh=20130709111845,1920x1080,{ts ''2013-07-09 06:18:58''}; __utma=90161412.436822896.1373368451.1373368451.1373368451.1; __utmb=90161412.11.10.1373368451; __utmc=90161412; __utmz=90161412.1373368451.1.1.'+'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __asc=06ff77ad13fc32381fd1f5d6405; __auc=06ff77ad13fc32381fd1f5d6405; __atuvc=4%7C28; MS=flat');

しかし、すべて無駄です。

4

1 に答える 1

1

私は正しいデータを投稿していると確信しています

それは機能しないので-明らかに機能しません(またはDelphiは機能しません-サーバーに違いはありません)。

通常のデバッグ ループを開始する必要があります。

  1. 参照作業動作を観察します。
  2. プログラムの動作を観察する
  3. 違いを見つける
  4. 差をなくす
  5. プログラムが動作するかどうかを確認する
  6. そうでない場合は、ステップ 2 に進みます。

参照実装はWWW browser、Opera、Chrome、Firefox、MS IE などのサイトで動作するものです。

  • 監視ツールは、HTTP SnifferWireShark や OmniPacket、Microsoft Net Monitor などですが、これは OS をいじくり回してかなり深いレベルで動作します。
  • または、Proxomitron や Membrane Monitor などの GUI を備えたローカル プロキシにすることもできますが、ローカル プロキシを介してトラフィックをルーティングするには、プログラムとブラウザの両方に特別な設定が必要になります。

次に、ウィキペディアでの浅い観察から始めて、関連する RFC ドキュメント (HTTP プロトコルのさまざまな部分の仕様) を開いて、観察された違いが何を意味し、それらをどのように修正するかを理解するために、HTTP について読む必要があります。例えば、実際には GET リクエストなどを使用する必要があるときに、多くの人が POST リクエストを使用します。

HTTP プログラムをデバッグしたいのですが、この HTTP ログには workign と borken が必要ですが、質問にはそれらがありません。さらに、ほとんどの場合、自分で修正できます。プログラムの HTTP ログを、RFC の理論と動作中のブラウザーの慣行の両方に従ってください。

于 2013-07-09T13:34:09.110 に答える