我想从数据库中获取数据并使用它来将用户登录到网站。
我有一个wpf页面,其中包含Web浏览器控件。我有这个代码登录用户访问网站,用PHP编写:
<form action='http://www.asite.net/index.php' method='post' name='frm'>
<?php
$user = $_GET['u'];
$pass = $_GET['p'];
echo "<input type='text' name='user' value='$user'>";
echo "<input type='text' name='pass' value='$pass'>";
?>
<input type='submit' name='submit' value='submit'>
</form>
我怎样才能在wpf中执行此操作?据我所知,我需要创建一个HTML并将其发布到网站。
我的问题:
1-如何在代码中创建这样的html?
2-如何自动将其提交到网站(假设我在wpf用户控件的构造函数上执行此操作)。
答案 0 :(得分:2)
据我了解,您的目标是登录并使会话在WebBrowser
内保持活动状态。如果是这样,您有几个选择:
首先,将WebBrowser
导航至www.asite.net
,以建立会话。
然后获取underlying WebBrowser ActiveX control并使用IWebBrowser2::Navigate2
方法,它有PostData
参数,允许执行HTTP POST请求。
或者,inject and execute some JavaScript会使用XHR以AJAX的方式发布表单。
或者,使用WebBrowser.Document
作为dynamic
创建隐藏的form
元素,填充并提交,与您JavaScript
相同。 1}}。
或者,使用COM XMLHTTP
object发送POST请求,它与WebBrowser
共享会话。
您还可以使用some low level UrlMon API发送POST请求。
已更新,以下是创建和提交:
的示例public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
NavigatedEventHandler handler = null;
handler = delegate
{
this.webBrowser.Navigated -= handler;
dynamic document = this.webBrowser.Document;
var form = document.createElement("form");
form.action = "http://requestb.in/tox7drto";
form.method = "post";
var input = document.createElement("input");
input.type = "text";
input.name = "name_1";
input.value = "value_1";
form.appendChild(input);
input = document.createElement("input");
input.type = "submit";
form.appendChild(input);
document.body.appendChild(form);
input.click();
};
this.webBrowser.Navigated += handler;
this.webBrowser.Navigate("about:blank");
}
}
答案 1 :(得分:0)
使用System.Net
命名空间,尤其是WebRequest
和WebResponse
对象。
看到上一个答案,它应该可以帮到你: