[英]HttpWebRequest and forms authentication in C#
我是一個系統人員,目前正在做兼職Web開發項目,所以我很陌生。 我正在嘗試為www.portapower.com編寫一個http客戶端。
對於在網站上發布的某些項目,如果它們符合特定要求,它將打印一條消息。
在嘗試訪問此頁面時:
http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==
該網站將我重定向到默認注冊頁面:
http://www.portapower.com/defaregit.php
這是我編碼的片段:
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());
我有用戶名和密碼,從瀏覽器使用時工作正常。 請告訴我這是否是訪問經過身份驗證的頁面的正確方法。
這取決於網站如何驗證用戶。 如果他們使用的是基本身份驗證或Windows身份驗證,那么您可以將HttpWebRequest
類的Credentials
屬性設置為用戶名/密碼/域信息,它應該可以正常工作。
但是,聽起來您必須在網站上輸入用戶名/密碼,這意味着您必須先登錄該網站。 查看主頁面,這是我在處理登錄的<form>
元素中找到的內容:
<form name="formlogin" method="post" action="./defalogin.php" >
<input name="emtext" type="text" id="emtext" size="12">
<input name="pstext" type="password" id="pstext" size="12">
<input type="submit" name="Submit" value="Logn in"
onClick="return logincheck()" >
</form>
我只包括相關部分。
鑒於此,您必須首先使用HttpWebRequest
轉到./defalogin.php
頁面,然后pstext
emtext
和pstext
值。 此外,請確保您的設定CookieContainer
屬性 ,以實例CookieContainer
。 當對POST的調用返回時,很可能會填充一個cookie,您必須將其發送回該站點。 只需繼續將CookieContainer
屬性設置在任何后續的HttpWebRequest
實例上,以確保Cookie被傳遞到該CookieContainer
。
然后,您將轉到鏈接中指示的頁面。
值得關注的還有logincheck
javascript函數,但是看一下腳本源代碼,它沒有什么值得注意的。
您傳遞的憑據是用於Windows身份驗證。 您需要提交包含模仿提交表單的數據的帖子數據,然后限制響應中設置的會話cookie,並使用該cookie以備將來請求
看看這個答案,它有代碼來做到這一點:
你不能這樣做; 您傳遞的憑據可以與基本身份驗證方案一起使用(即,在瀏覽器中,您會彈出一個用戶名/密碼對話框。)您必須模擬數據在該表單中的條目並捕獲登錄cookie並使用它。
NetworkCredential類實際上用於控制常規Windows憑據(NTLM,Kerberos等)。
該站點是在Apache上運行的PHP站點,因此我認為他們不使用NTLM或kerberos。
你想要做的是將一些FORM字段發布到網站,然后保留你回來的cookie。 確保在后續請求中將cookie推回到站點,以便它知道您已經登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.