2017-03-02 8 views
2

Webポストフォームに問題があります。 私はページをダウンロードしましたが、2つの必要な値(form_build_idform_token)を外挿しましたが、一度POSTを送信すると、サーバーはPOSTで何も受信しません。フォームのPOSTデータを送信できません

除外エラー:

  • 間違ったリンク(ページをダウンロードすることができます)。
  • 不正確な外挿されたデータ(検証済み)。
  • 誤った文字列myParameters(検証済み)。
  • 私は手動でフォームをテストし、正常に動作します。

いくつかのアイデア?私は2日間頭を叩きました!

using (WebClientEx wc = new WebClientEx()) 
     { 
      wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
      string HTMLPage = wc.DownloadString(CREAT_TICKET_URL); 

      string form_build_id = SearchValue(HTMLPage, "<input type=\"hidden\" name=\"form_build_id\"", "value=\"", "\" />"); 
      string form_token  = SearchValue(HTMLPage, "<input type=\"hidden\" name=\"form_token\"", "value=\"", "\" />"); 

      string myParameters = "macchina=" + cmacExtID + "&utente=" + custExtID + "&oggetto=" + Title + "&body=" + Note + "&op=Conferma&form_build_id=" + form_build_id + "&form_token=" + form_token + "&form_id=app_form_new_ticket"; 

      string HtmlResult = wc.UploadString(CREAT_TICKET_URL, myParameters); 
     } 

注:WebClientExクラスは、Webクライアントを継承します。私はログインや仕事などの他の形式にこのアプローチを使用しました。

このアプローチが間違っている場合、「ページをダウンロードし、HTMLから値を抽出し、ポストフォームを送信する」一連の操作を行う最良の方法は何ですか?

答えて

1

問題はヘッダーでした! ヘッダーはコールごとに設定する必要がありますが、最初に設定するだけで十分だと思いました。

using (WebClientEx wc = new WebClientEx()) 
    { 
     wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
     string HTMLPage = wc.DownloadString(CREAT_TICKET_URL); 

     string form_build_id = SearchValue(HTMLPage, "<input type=\"hidden\" name=\"form_build_id\"", "value=\"", "\" />"); 
     string form_token  = SearchValue(HTMLPage, "<input type=\"hidden\" name=\"form_token\"", "value=\"", "\" />"); 

     string myParameters = "macchina=" + cmacExtID + "&utente=" + custExtID + "&oggetto=" + Title + "&body=" + Note + "&op=Conferma&form_build_id=" + form_build_id + "&form_token=" + form_token + "&form_id=app_form_new_ticket"; 

     wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
     string HtmlResult = wc.UploadString(CREAT_TICKET_URL, myParameters); 
    } 
関連する問題