你好有一個用MW 1.18.2構建的網站,它要求用戶登錄 - 沒有這個網站,你不能訪問它的任何頁面。我有手動從瀏覽器登錄的有效憑據,但我需要能夠從我的Windows窗體應用程序(C#)執行相同的操作:當用戶單擊一個按鈕時,我必須顯示(或導航到)來自網站的某個頁面,爲此我必須先以編程方式登錄。我已經在PHP和JScript中找到了這些示例,但在該Web工作人員中是新手,我不知道如何使用它們,我不確定它們可以在客戶端使用。如何以編程方式登錄到mediawiki網站
任何幫助將不勝感激。
你好有一個用MW 1.18.2構建的網站,它要求用戶登錄 - 沒有這個網站,你不能訪問它的任何頁面。我有手動從瀏覽器登錄的有效憑據,但我需要能夠從我的Windows窗體應用程序(C#)執行相同的操作:當用戶單擊一個按鈕時,我必須顯示(或導航到)來自網站的某個頁面,爲此我必須先以編程方式登錄。我已經在PHP和JScript中找到了這些示例,但在該Web工作人員中是新手,我不知道如何使用它們,我不確定它們可以在客戶端使用。如何以編程方式登錄到mediawiki網站
任何幫助將不勝感激。
網站認證往往工作如下:憑據
也許最簡單的選擇是以編程方式在WebBrowser控件中填寫表單並提交它。所需的步驟是discussed here。主要步驟是確定要操作的表單元素(用戶名和密碼字段),所有這些都可以使用大多數Web瀏覽器中提供的各種開發人員工具完成。
另一種選擇是使用HttpClient提交登錄詳細信息,然後將接收到的會話和cookie數據傳遞給WebBrowser控件。看着維基百科,登陸場似乎通過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
我想通了這一點通過網絡標籤下使用谷歌Chrome瀏覽器的開發者工具(按F12)。如果您提交表單,通常可以找到包含表單信息的POST請求(而不是大多數HTTP GET請求)。
您在這裏遇到的最大問題可能是表單中隱藏的令牌。我會想象它現在停止從登錄表單以外的任何地方進行自動登錄。如果mediawiki默認使用此功能,則如果您不控制mediawiki安裝,則沒有簡單的方法繞過它。此時,您可能只需使用第一種方法(因爲您必須訪問DOM才能獲得令牌)。
謝謝LeoR,它的工作原理! – user2907621
謝謝雷歐,它的工作原理:
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");
}
您使用的網絡瀏覽器控制或純代碼來顯示網頁? – Ben
這沒關係 - 我可以做任何一種方式 – user2907621