簡體   English   中英

HttpWebRequest和C#中的表單身份驗證

[英]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身份驗證,那么您可以將HttpWebRequestCredentials屬性設置為用戶名/密碼/域信息,它應該可以正常工作。

但是,聽起來您必須在網站上輸入用戶名/密碼,這意味着您必須先登錄該網站。 查看主頁面,這是我在處理登錄的<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 emtextpstext值。 此外,請確保您的設定CookieContainer屬性 ,以實例CookieContainer 當對POST的調用返回時,很可能會填充一個cookie,您必須將其發送回該站點。 只需繼續將CookieContainer屬性設置在任何后續的HttpWebRequest實例上,以確保Cookie被傳遞到該CookieContainer

然后,您將轉到鏈接中指示的頁面。

值得關注的還有logincheck javascript函數,但是看一下腳本源代碼,它沒有什么值得注意的。

您傳遞的憑據是用於Windows身份驗證。 您需要提交包含模仿提交表單的數據的帖子數據,然后限制響應中設置的會話cookie,並使用該cookie以備將來請求

看看這個答案,它有代碼來做到這一點:

使用HttpWebRequest登錄頁面

你不能這樣做; 您傳遞的憑據可以與基本身份驗證方案一起使用(即,在瀏覽器中,您會彈出一個用戶名/密碼對話框。)您必須模擬數據在該表單中的條目並捕獲登錄cookie並使用它。

NetworkCredential類實際上用於控制常規Windows憑據(NTLM,Kerberos等)。

該站點是在Apache上運行的PHP站點,因此我認為他們不使用NTLM或kerberos。

你想要做的是將一些FORM字段發布到網站,然后保留你回來的cookie。 確保在后續請求中將cookie推回到站點,以便它知道您已經登錄。

暫無
暫無

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

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