【解決方法】デフォルトのブラウザで POST パラメータを使用して URL を開く

プログラミングQA


やあみんな!

システムのデフォルトのブラウザを開いて、カスタム URI POST データを送信する必要があります。 したがって、コードには 2 つの部分があります。1 つは def ブラウザを開き、もう 1 つは POST データをそれに送信する必要がありますが、実行しません。

それについて何と言えますか?

C#
private void button1_Click(object sender, EventArgs e)
        {
            
            string browser = string.Empty;
            RegistryKey key = null;
            try
            {
                key = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false);

                //trim off quotes
                browser = key.GetValue(null).ToString().ToLower().Replace("\", "");
                if (!browser.EndsWith("exe"))
                {
                    //get rid of everything after the ".exe"
                    browser = browser.Substring(0, browser.LastIndexOf(".exe")+4);
                }
            }
            finally
            {
                if (key != null) key.Close();
            }
            //open default system browser
            System.Diagnostics.Process.Start(browser, strURL.Text);


//***************************************************

            // Convert string data into byte array 
            string strData = "Name=Sergiy&Age=21";
            byte[] dataByte = Encoding.UTF8.GetBytes(strData);

            HttpWebRequest POSTRequest = (HttpWebRequest)WebRequest.Create(strURL.Text);
            POSTRequest.Method = "POST";
            // Set the content type - Mine was xml.
            POSTRequest.ContentType = "application/x-www-form-urlencoded";
            POSTRequest.KeepAlive = false;
            POSTRequest.Timeout = 5000;
            POSTRequest.ContentLength = dataByte.Length;
            // Get the request stream
            Stream POSTstream = POSTRequest.GetRequestStream();
            // Write the data bytes in the request stream
            POSTstream.Write(dataByte, 0, dataByte.Length);

            //Get response from server
            HttpWebResponse POSTResponse = (HttpWebResponse)POSTRequest.GetResponse();

        }

ありがとう!

解決策 2

このフォームをどこで実行するのか教えてください。
クライアント側でこれを行う場合は、JavaScript を使用してフォームを作成し、投稿する必要があります。

それ以外の場合は、サーバーに保存したい場合は、ブラウザを開いて投稿データのある場所に移動するだけです。 これが必要な場合は、Process.Start を使用して URL のみを呼び出すことができ、指定された場所に自動的に移動します。

一方、プログラム的に必要な場合は、WebRequest.Create を使用できます。

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx[^]

WebBrowser を使用して応答のみを表示します。 この場合は、Process.Start を使用しないでください。

解決策 3

.NET を備えたコンピュータ上でアプリケーションを実行する必要があります。 ページアドレスとPOSTデータの2つのパラメータを取ります。 次に「開く」ボタンを押します。 そして、URL で DEFAULT ブラウザを開き、そこに POST パラメータを渡す必要があります。

ソースを見つけましたが、機能しません(コンパイルはできますが、反応しません:

// 投稿を受信できる URL を使用してリクエストを作成します。
WebRequest リクエスト = WebRequest.Create(strURL.Text);
// リクエストの Method プロパティを POST に設定します。
request.Method = “POST”;
// POST データを作成し、バイト配列に変換します。
string postData = “名前=セルギ&年齢=14”;
バイト[] byteArray = Encoding.UTF8.GetBytes(postData);
// WebRequest の ContentType プロパティを設定します。
request.ContentType = “アプリケーション/x-www-form-urlencoded”;
// WebRequest の ContentLength プロパティを設定します。
request.ContentLength = byteArray.Length;
// リクエストストリームを取得します。
ストリーム dataStream = request.GetRequestStream();
// データをリクエスト ストリームに書き込みます。
dataStream.Write(byteArray, 0, byteArray.Length);
// Stream オブジェクトを閉じます。
dataStream.Close();
// レスポンスを取得します。
WebResponse 応答 = request.GetResponse();
// ステータスを表示します。
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// サーバーから返されたコンテンツを含むストリームを取得します。
データストリーム = 応答.GetResponseStream();
// 簡単にアクセスできるように、StreamReader を使用してストリームを開きます。
StreamReader リーダー = 新しい StreamReader(dataStream);
// 内容を読みます。
文字列応答FromServer = Reader.ReadToEnd();
// 内容を表示します。
Console.WriteLine(responseFromServer);
// ストリームをクリーンアップします。
Reader.Close();
dataStream.Close();
応答.Close();

解決策 1

WebBrowser の自動ガイダンスや、機能の送信さえも難しいことではありません。
簡単なログインページがあるとします。ユーザー名とパスワードを入力し、「ログイン」ボタンをクリックしてログインします。 既知のユーザー名入力ボックス ID (または名前、以下同じ) がユーザー名、パスワード入力ボックス ID がパスワード、「ログイン」ボタン ID が submitbutton の場合、WebBrowser の DocumentCompleted イベントのみが必要です。次のコードを使用します。 :

HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];
HtmlElement tbUserid = webBrowser.Document.All["username"];
HtmlElement tbPasswd = webBrowser.Document.All["password"];

if (tbUserid == null || tbPasswd == null || btnSubmit == null)
    return;

tbUserid.SetAttribute("value", "smalldust");
tbPasswd.SetAttribute("value", "12345678");

btnSubmit.InvokeMember("click"); 

ここでは、SetAttribute を使用してテキスト ボックスの「value」属性を設定し、InvokeMember を使用してボタンの「click」メソッドを呼び出します。 独自のプロパティとメソッドのさまざまな要素の HTML も異なります。 Net 2.0 は、同じ Html のさまざまな要素を要約するための統合された HtmlElement を提供します。また、要素固有の機能を呼び出す 2 つの方法が提供されます。 さまざまなプロパティとメソッドのリストにある HTML 要素については、MSDN の DHTML リファレンスにアクセスできます。
※ フォームで送信しますが、ボタンの代わりにフォーム要素にアクセスし、フォーム要素のメソッドを使用して送信する別の方法もあります。

HtmlElement formLogin = webBrowser.Document.Forms["loginForm"];  
//……
formLogin.InvokeMember("submit"); 

[^]

コメント

タイトルとURLをコピーしました