C#:从Windows桌面应用程序打开浏览器并POST到URL

时间:2009-12-14 20:55:42

标签: c# wpf browser post

我有一个小型的WPF应用程序(虽然我认为无论是wpf表单还是webform应用程序并不重要?)我想要启动一个新的浏览器窗口并POST到特定的URL。我一直在搞乱:

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

启动窗口,但我不认为我可以使用相同的过程实际发布到网址...我也尝试过HttpWebRequest,但我希望用户能够在我之后使用该应用程序发布到这个网址,不只是向他们展示结果......我能看到什么才能做到这样的事情?

4 个答案:

答案 0 :(得分:11)

没有直接的方法可以做到这一点。您可以做的是生成一个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控件

答案 1 :(得分:5)

改为使用WebBrowser Class

答案 2 :(得分:3)

您可以创建隐藏的WebBrowser控件并执行Navigate()(使用允许您指定请求方法的重载)。您需要指定一个“_blank”目标框架,以便在新的浏览器窗口中进行导航。

答案 3 :(得分:3)

有多种解决方案,不确定哪种解决方案最适合您......

  1. 继续您原来的方法
  2. 按照其他答案的建议在您的应用程序中嵌入Web浏览器控件
  3. 以编程方式“完成幕后”
  4. 对于#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();
    }
    
    • 网址1:http://www.google.com
    • URL2:javascript:function x(){document.all.q.value ='stackoverflow'; document.forms [0] .submit();} x();