I want to get data from a database and use it to login a user to a web site.
I have a wpf page that holds a web browser control. and I have this code that login user to web site which is written in 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>
How can I do this in wpf? As far as I can understand, I need to create an html and post it to site.
My questions:
1- How can I create such html in code?
2- How can I automatically submit it to the site (assuming I am doing this on constructor of a wpf user control).
As far as I understand, your goal is to log in and keep the session active inside the WebBrowser. If so, you have a few options:
First, navigate the
WebBrowsertowww.asite.net, to establish the session.Then obtain the underlying WebBrowser ActiveX control and use
IWebBrowser2::Navigate2method, it hasPostDataparameter which allows to do an HTTP POST request.Or, inject and execute some JavaScript which would use XHR to post the form the AJAX way.
Or, use
WebBrowser.Documentasdynamicto create a hiddenformelement, populate it and submit it, in the same way you'd do withJavaScript.Or, use COM
XMLHTTPobject to send a POST request, it shares the session with theWebBrowser.You could also use some low level UrlMon API to send a POST request.
Updated, here is an example of creating and submitting a :
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");
}
}
Use the System.Net namespace, particularly the WebRequest and WebResponse objects.
See this previous answer, it should get you started:
来源:https://stackoverflow.com/questions/22669214/how-to-post-data-to-a-web-server-using-wpf-webbrowser