दिलचस्प पोस्ट
बाएं संक्रमण से सीएसएस 3 स्लाइड-इन सी # कोड में सी + + डीएलएल में परिभाषित क्लास का उपयोग करना मैं अपने वेब एमवीसी अनुप्रयोग में एक एक्सेस कंट्रोल सूची कैसे लागू करूं? किसी पाठ फ़ाइल की वर्ण एन्कोडिंग को कैसे पता लगा सकता है? UITableView dequeueReusableCellWithIdentifier थ्योरी कोड से androidManifest के "debuggable" मान हो रहा है? आईपैड के लिए सफ़ारी में jQuery का उपयोग कर टच इवेंट को कैसे पहचाना? क्या यह संभव है? HTML5 – एमपी 4 वीडियो IE9 में नहीं खेलता है परियोजना साफ होने के बाद आरजेवा गायब हो जाता है गिट: एक ही बार में कई शाखाओं को कैसे दुबारा बांटने के लिए? सी #: गतिशील रनटाइम डाली यूनिटी में संसाधन फ़ोल्डर का उपयोग करना गिथूब को प्रतिबद्ध करने पर गिट विफल हो जाता है कॉलिंग क्लोजर को सीधे ऑब्जेक्ट ऑब्जेक्ट करने के लिए भेजा गया एंड्रॉइड में एक जेसन फाइल पढ़ना

वेबसाइट और प्रवेश डेटा में लॉगिन करने के लिए वेबमेल या वेबआरिएंस्ट का उपयोग करना

मैं WebClient / WebRequest का उपयोग कर किसी वेबसाइट पर प्रतिबंधित डेटा तक पहुंचने का प्रयास कर रहा हूं उस वेबसाइट पर कोई आधिकारिक एपीआई नहीं है, इसलिए मैं क्या करने की कोशिश कर रहा हूं, बस एचटीएमएल फार्म भरें और सर्वर पर मान पोस्ट करें, इसलिए मैं लॉग इन हूं।

मैंने यह और यह कोशिश की, लेकिन ऐसा नहीं लगता कि आने वाले अनुरोध लॉग इन हैं।

बाद के उदाहरण अधिक आकर्षक हैं क्योंकि मैं स्पष्ट रूप से WebClient पसंद करता हूं, लेकिन विरासत WebRequest करेंगे।

वैसे भी, पहले उदाहरण में मुझे लगता है कि यह लॉगिन था, लेकिन आगामी अनुरोध जो निजी डेटा का उपयोग करते हैं, एक संदेश के साथ एक पृष्ठ "यह सदस्य केवल सामग्री है" वापस आती है।

WebClient स्थायी रूप से लॉग इन कैसे करें?

वेब के समाधान से एकत्रित समाधान "वेबसाइट और प्रवेश डेटा में लॉगिन करने के लिए वेबमेल या वेबआरिएंस्ट का उपयोग करना"

यह है कि मैंने क्या किया और यह काम करता है ( क्रेडिट )।

इस वर्ग को पहले जोड़ें:

 namespace System.Net { using System.Collections.Specialized; using System.Linq; using System.Text; public class CookieAwareWebClient : WebClient { public void Login(string loginPageAddress, NameValueCollection loginData) { CookieContainer container; var request = (HttpWebRequest)WebRequest.Create(loginPageAddress); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var query = string.Join("&", loginData.Cast<string>().Select(key => $"{key}={loginData[key]}")); var buffer = Encoding.ASCII.GetBytes(query); request.ContentLength = buffer.Length; var requestStream = request.GetRequestStream(); requestStream.Write(buffer, 0, buffer.Length); requestStream.Close(); container = request.CookieContainer = new CookieContainer(); var response = request.GetResponse(); response.Close(); CookieContainer = container; } public CookieAwareWebClient(CookieContainer container) { CookieContainer = container; } public CookieAwareWebClient() : this(new CookieContainer()) { } public CookieContainer CookieContainer { get; private set; } protected override WebRequest GetWebRequest(Uri address) { var request = (HttpWebRequest)base.GetWebRequest(address); request.CookieContainer = CookieContainer; return request; } } } 

उपयोग:

 public static void Main() { var loginAddress = "www.mywebsite.com/login"; var loginData = new NameValueCollection { { "username", "shimmy" }, { "password", "mypassword" } }; var client = new CookieAwareWebClient(); client.Login(loginAddress, loginData); } 

HTTP स्टेटलेस है इसलिए, आप WebClient को स्थायी रूप से लॉग इन नहीं कर सकते। एक सत्र की अवधारणा HTTP में मौजूद नहीं है सर्वर-साइड प्रौद्योगिकियों जैसे कि एएसपी.एन.ई. कुकी या एक क्वेरी स्ट्रिंग पैरामीटर का उपयोग करते हुए सत्र की अवधारणा के माध्यम से एक राज्यपूर्ण व्यवहार अनुकरण करती है जो हर अनुरोध में आगे और पीछे भेजती है। यह कहने के बाद, WebClient से एक ब्राउज़र क्या करता है, इसका अनुकरण करना संभव है। यदि आपके पास वेबसाइट तक पहुंच है, तो सही क्रेडेंशियल का उपयोग करके इसे कनेक्ट करें और फ़ेडरलर का उपयोग करके ट्रैफ़िक को कैप्चर करें। इसके बाद, सुनिश्चित करें कि वेबक्लंट ब्राउज़र के समान सही कुकीज़, अनुरोध हेडर, क्वेरी स्ट्रिंग, आदि को भेजता है।