【问题标题】:C#: Open a browser and POST to a url from a windows desktop appC#:打开浏览器并从 Windows 桌面应用程序 POST 到 url
【发布时间】:2010-12-26 13:57:55
【问题描述】:

我有一个小型 WPF 应用程序(尽管我想它是 wpf 表单还是 webform 应用程序并不重要?)我想启动一个新的浏览器窗口并 POST 到特定的 url。我一直在胡闹:

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

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

【问题讨论】:

  • 为什么会有 ASP.NET 标签?
  • 啊,不好意思,只是习惯了大部分时间放在那里,去掉了。

标签: c# wpf browser post


【解决方案1】:

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

  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();

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我最终使用了这种方法。将 HTML 代码写入临时文件,然后在文件上使用 Process.Start() 在浏览器中打开它。它比使用击键更强大,并且可以在用户选择的任何体面的浏览器上运行。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      请改用WebBrowser Class。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2012-01-28
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多