आप WebClient को POST (GET के बजाय, जो HTTP वर्ब है जिसे आप वर्तमान में DownloadString के साथ उपयोग कर रहे हैं) जारी रख सकते हैं, लेकिन मुझे लगता है कि आपको (थोड़ी) निम्न-स्तरीय कक्षाओं WebRequest और WebRonse के साथ काम करना आसान लगेगा।
इसके दो भाग हैं - पहला है लॉगिन फॉर्म को पोस्ट करना, दूसरा "सेट-कुकी" हेडर को रिकवर करना और अपने GET अनुरोध के साथ "कुकी" के रूप में सर्वर को वापस भेजना। सर्वर अब से आपको पहचानने के लिए इस कुकी का उपयोग करेगा (यह मानते हुए कि यह कुकी-आधारित प्रमाणीकरण का उपयोग कर रहा है, जिस पर मुझे पूरा विश्वास है कि यह पृष्ठ सेट-कुकी शीर्षलेख देता है जिसमें "PHPSESSID" शामिल है)।
लॉगिन फॉर्म के लिए पोस्टिंग
फॉर्म पोस्टों को अनुकरण करना आसान है, यह आपके पोस्ट डेटा को इस प्रकार प्रारूपित करने का एक मामला है:
field1=value1&field2=value2
WebRequest और code का उपयोग करके मैंने Scott Hanselman से अनुकूलित किया , यहां बताया गया है कि आप अपने लॉगिन फ़ॉर्म में POST फ़ॉर्म डेटा कैसे लेते हैं:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin";
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
अपने लॉगिन फ़ॉर्म के लिए सेट-कुकी शीर्षलेख में आपको क्या देखना चाहिए, इसका एक उदाहरण यहां दिया गया है:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
लॉगिन फॉर्म के पीछे पेज को प्राप्त करना
अब आप अपने GET अनुरोध को उस पृष्ठ पर कर सकते हैं जिसे आपको लॉग इन करने की आवश्यकता है।
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
संपादित करें:
यदि आपको पहले POST के परिणाम देखने की आवश्यकता है, तो आप उस HTML को पुनर्प्राप्त कर सकते हैं जिसे इसके साथ लौटाया गया है:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
इसे सीधे नीचे रखें cookieHeader = resp.Headers["Set-cookie"];
और फिर PageSource में आयोजित स्ट्रिंग का निरीक्षण करें।