簡體   English   中英

C#:從Windows桌面應用程序打開瀏覽器並POST到URL

[英]C#: Open a browser and POST to a url from a windows desktop app

我有一個小型的WPF應用程序(雖然我認為無論是wpf表單還是webform應用程序並不重要?)我想要啟動一個新的瀏覽器窗口並POST到特定的URL。 我一直在搞亂:

System.Diagnostics.Process.Start("http://myurl.com");

啟動窗口,但我不認為我可以使用相同的過程實際發布到網址...我也嘗試過HttpWebRequest但我希望用戶能夠在發布到我之后使用該應用程序這個網址,不只是向他們展示結果......我能看到什么才能做到這樣的事情?

沒有直接的方法可以做到這一點。 您可以做的是生成一個HTML頁面,其中的表單中填充了您需要發布的數據,以及一些javascript,以便在加載時自動發布頁面。 然后你只需要在瀏覽器中打開該頁面......

生成的HTML可能如下所示:

<html>
<head>
<script language="Javascript">
function submitForm() {
    var theForm = document.getElementById("theForm");
    theForm.submit();
}
</script>
</head>
<body onload="submitForm()">
<form id="theForm" action="http://myurl.com" method="POST">
    <input type="text" name="username" value="myusername"/>
    <input type="password" name="password" value="mypassword"/>
</form>
</body>
</html>

如果必須在應用程序中顯示該頁面,請將其加載到WebBrowser控件中

請改用WebBrowser類

您可以創建隱藏的WebBrowser控件並執行Navigate() (使用允許您指定請求方法的重載)。 您需要指定一個“_blank”目標框架,以便在新的瀏覽器窗口中進行導航。

有多種解決方案,不確定哪一種最適合您......

  1. 繼續您的原始方法
  2. 按照其他答案中的建議,在您的應用程序中嵌入Web瀏覽器控件
  3. 以編程方式“在幕后”做所有事情

對於#3,你可能想看這里: http//geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

如果你想使用#1 - 它更棘手,因為你需要控制外部應用程序,不同的瀏覽器會表現不同。

在處理一個“用戶不友好”的應用程序時,我使用了“javascript:”協議和IE下面的代碼作為默認瀏覽器。 請注意,它不是“生產就緒”代碼。 沒有錯誤處理,用戶可能會將焦點從啟動的瀏覽器轉移,或使用沒有“javascript:”協議支持等的瀏覽器。

static void Main()
{
    Settings s = Settings.Default;
    Process.Start(s.URL1);
    Thread.Sleep(s.Delay1);
    SendKeys.SendWait("%D");
    Thread.Sleep(100);
    SendKeys.SendWait(EncodeForSendKey(s.URL2));
    SendKeys.SendWait("{ENTER}");
}

public static string EncodeForSendKey(string value)
{
    StringBuilder sb = new StringBuilder(value);
    sb.Replace("{", "{{}");
    sb.Replace("}", "{}}");
    sb.Replace("{{{}}", "{{}");
    sb.Replace("[", "{[}");
    sb.Replace("]", "{]}");
    sb.Replace("(", "{(}");
    sb.Replace(")", "{)}");
    sb.Replace("+", "{+}");
    sb.Replace("^", "{^}");
    sb.Replace("%", "{%}");
    sb.Replace("~", "{~}");
    return sb.ToString();
}
  • URL1: http//www.google.com
  • URL2:javascript:function x(){document.all.q.value ='stackoverflow'; document.forms [0] .submit();} x();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM