1

ご存知の方もいらっしゃると思いますが、C# で POST を実行できます。これは、webrequest/response を使用して Web サイトのボタンを「押す」ことができることを意味します。現在、javascript で動作するサイトにもボタンがあり、次のように始まります。

(function($j){
$j.data(document, 'maxPictureSize', 764327);
share_init();
})(jQuery.noConflict());

httprequests やその他の種類のライブラリを使用して C# でこれらの関数呼び出しを行うことができるソリューションはありますか?

4

4 に答える 4

3

誰かが POST するボタンを押したとサーバーに思わせ、Web ページがその POST に含めるデータを送信することで、Web ページのサーバーの「バックエンド」を操作するプログラムがあると仮定します。

最初に必要なツールは、 Microsoft Network Monitor 3.3または別のネットワーク パケット トレース ツールです。これを使用して、実際の Web ページから POST を確認します。NetMon は (少なくとも) パケットを HTTP の断片とヘッダーに分解するため、何が起こっているかを簡単に確認できます。

これで、実際の POST が送信しているデータと、データの送信先の URL がわかります (POST では珍しい「クエリ文字列」を含む)。

次に、C# を記述して、同じ URL に対して同じ種類の POST を作成する必要があります。HttpWebRequest/HttpWebResponse については既にご存知のようですので、詳しくは説明しません。NetMon トレースで、Content-Typeヘッダーがapplication/x-www-form-urlencodedであることに気付いたかもしれません。これはほとんどの場合、(名前のように) URL エンコードされた HTML フォームからのデータであるため、データを POST する前に URL エンコードする必要があり、Content-Lengthのエンコードされたデータのサイズを知る必要があります。HttpUtility.UrlEncode() は、このエンコーディングに使用するメソッドの 1 つです。

できたと思ったら、試してみて、NetMon を使用して POST 要求とサーバーからの応答を調べてください。ミステリー Web ページが行っていることを再現するまで続けます。

于 2010-02-13T15:32:32.313 に答える
2

OK、webBrowser フォームを使用してページを読み込みます。

webBrowser.Navigate( url );

次に、Web ブラウザ フォームの内容をファイルまたは文字列に保存します。

File.WriteAllText(@"c:\test\ajax_test.txt", webBrowser1.Document.Body.Parent.OuterHtml, Encoding.GetEncoding(webBrowser1.Document.Encoding));

txt ファイルを見ると、探している html タグが含まれているはずです。

于 2012-12-11T15:46:33.563 に答える
1

JavaScript を使用して POST を実行する場合でも、ボタン送信と同じように機能する JS のどこかに POST があります。JS コードが投稿されている場所を掘り下げて、それがどのように行われるかを確認するだけです。次に、C# で同じ投稿を作成します。

たとえば、ASP.NET 独自の __doPostBack 関数を取り上げます。

var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

入力フィールドにいくつかの値を設定し、送信するフォームを掘り下げていることがわかります。基本的に、入力に同じ値を入力して同じフォームを送信する必要があり、JS 送信を自分で行う必要があります。

于 2010-02-13T15:13:41.800 に答える
0

これらのボタンが送信しているリクエストとヘッダーをキャプチャし、それらをHttpWebRequestでシミュレートする必要があります。Web サイトでのユーザー アクションを自動化したい場合は、 WatiNを検討することもできます。

于 2010-02-13T15:14:53.397 に答える