簡體   English   中英

如何使用asp.net登錄其他網站?

[英]How to sign in to other websites using asp.net?

我正在嘗試制作一個可以為用戶登錄其他網站並獲取某些信息的網站。 例如:一個基於網絡的游戲論壇,它會自動提取您的游戲統計數據。 我的網站必須導航到游戲 url,填寫用戶名和密碼,登錄,然后在登錄后閱讀 html(這是簡單的部分,為此我只需使用 HTML 敏捷包或類似的東西) . 這個登錄過程是否可以使用 asp.net?

是的。

不要認為它只是進入頁面並填寫內容。您將需要創建一個包含正確的 HTTP 標頭和數據的Web 請求,該請求將使他們的服務器成為填充所有內容的人in。您需要查看您嘗試使用的站點以了解具體情況,但我假設當您單擊登錄時,它們會發送一組 POST 數據。示例,從 MSDN 中提取並修改更接近你需要的東西(前幾行):

WebRequest request = WebRequest.Create ("http:/www.site.com/loginPostback");
request.Method = "POST";
// Create POST data and convert it to a byte array.
string postData = "username=blah;password=blah";
byte[] byteArray = Encoding.UTF8.GetBytes (postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream ();
// Write the data to the request stream.
dataStream.Write (byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close ();
// Get the response.
WebResponse response = request.GetResponse ();
// Display the status.
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream ();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader (dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd ();
// Display the content.
Console.WriteLine (responseFromServer);
// Clean up the streams.
reader.Close ();
dataStream.Close ();
response.Close ();

然后,您可以檢查服務器在登錄后發回的 HTML 的響應流,以獲取您需要的信息。

話雖如此,您可能想聯系他們,看看他們是否有 API。 如果他們更改登錄表單的工作方式,您就會崩潰。 或者,如果該站點支持 OAuth 之類的東西,請走這條路。

登錄過程因站點而異。 使用Fiddler2並首先正常登錄站點以查看您需要的信息。 然后在您的代碼中使用WebClient設置正確的參數並登錄。然后注意 cookie! WebClient 將返回 cookie。 如果您抓取多個頁面,請確保再次設置 cookie,以便您仍然處於登錄狀態。

在極少數情況下使用 HTTP 身份驗證。 如果是這樣,只需在發出請求之前在 WebClient 中設置Credentials

這聽起來像是OpenID的工作。

通常對於這樣的事情,人們使用SSO(單點登錄)

但是,您可以對要使用 .Net 登錄的站點執行后注入。 這需要一些工作,您需要知道表單發布的位置和傳遞的值。 此外,您還必須為您嘗試登錄的每個站點添加不同的后注入(這會變得非常混亂)。

如果可能,我推薦 SSO。

這在很大程度上取決於如何在目標網站上實施身份驗證。 但歸根結底,它都是 HTML 和 HTTP [headers],所以它絕對是可行的。

處理所有可能的身份驗證方案將是一場噩夢,祝你好運。 =)

為什么不考慮通過 OpenID、Facebook 或某些公開可用的授權商店等流行站點使用其他身份驗證機制?

布賴恩

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM