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

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

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

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

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

  1. 继续您的原始方法
  2. 按照其他答案中的建议,在您的应用程序中嵌入Web浏览器控件
  3. 以编程方式“在幕后”做所有事情

对于#3,你可能想看看这里: http : //geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

如果你想使用#1 – 它更棘手,因为你需要控制外部应用程序,不同的浏览器会表现不同。

在处理一个“用户不友好”的应用程序时,我使用了“javascript:”协议和IE下面的代码作为默认浏览器。 请注意,它不是“生产就绪”代码。 没有error handling,用户可能会将焦点从启动的浏览器转移,或使用没有“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();

没有直接的方法可以做到这一点。 您可以做的是生成一个HTML页面,其中的表单中填充了您需要发布的数据,还有一些javascript可以在加载时自动发布页面。 然后你只需要在浏览器中打开该页面……

生成的HTML可能如下所示:

      

如果必须在应用程序中显示该页面,请将其加载到WebBrowser控件中

请改用WebBrowser类 。

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