C# 如何以编程方式登录mediawiki网站
您好,有一个使用MW 1.18.2构建的网站,它要求用户登录-没有它,您无法访问其中的任何页面。我拥有从浏览器手动登录的有效凭据,但我需要能够从windows窗体应用程序(C#)中执行同样的操作:当用户单击按钮时,我必须显示(或导航到)网站的特定页面,为此,我必须先以编程方式登录。我在PHP和JScript中找到了这些示例,但作为该网站的新手,我不知道如何使用它们,也不确定它们是否可以在客户端使用C# 如何以编程方式登录mediawiki网站,c#,php,login,mediawiki,C#,Php,Login,Mediawiki,您好,有一个使用MW 1.18.2构建的网站,它要求用户登录-没有它,您无法访问其中的任何页面。我拥有从浏览器手动登录的有效凭据,但我需要能够从windows窗体应用程序(C#)中执行同样的操作:当用户单击按钮时,我必须显示(或导航到)网站的特定页面,为此,我必须先以编程方式登录。我在PHP和JScript中找到了这些示例,但作为该网站的新手,我不知道如何使用它们,也不确定它们是否可以在客户端使用 任何帮助都将不胜感激。网站身份验证的工作原理如下: 用户(通过HTTP POST操作)向服务器提交
任何帮助都将不胜感激。网站身份验证的工作原理如下:
URL: https://en.wikipedia.org/w/index.php?title=Special:UserLogin&action=submitlogin&type=login&returnto=Main+Page
wpName: <username>
wpPassword: <password>
wpRemember: 1|0
wpLoginAttempt: Log in
wpLoginToken: <a token from a hidden form input>
wpForceHttps: 0
URL:https://en.wikipedia.org/w/index.php?title=Special:UserLogin&action=submitlogin&type=login&returnto=Main+页面
wpName:
密码:
记住:1 | 0
wploginattent:登录
wpLoginToken:
wpfforcehttps:0
我通过在网络标签下使用谷歌Chrome的开发者工具(按F12键)发现了这一点。如果提交表单,通常可以找到包含表单信息的POST请求(与大多数HTTP GET请求相反)
这里最大的问题可能是表单中隐藏的令牌。我可以想象,除了登录表单之外,任何地方都可以停止自动登录。如果mediawiki在默认情况下使用此选项,那么如果您不控制mediawiki的安装,就无法轻松绕过它。此时,您最好只使用第一种方法(因为您必须访问DOM才能获得令牌)。谢谢您,或者,它可以:
private void buttonLoginAndShowMainPage_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate(mediawikisite);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc = this.webBrowser1.Document;
HtmlElement LoginForm = doc.Forms[0];
HtmlElement UserName = doc.GetElementById("wpName1");
HtmlElement Password = doc.GetElementById("wpPassword1");
UserName.SetAttribute("value", "myuserid");
Password.SetAttribute("value", "mypassword");
LoginForm.InvokeMember("submit");
}
您是使用web浏览器控件还是纯代码来显示页面?这没关系,我都可以