दिलचस्प पोस्ट
DataTemplate के साथ एक सूची बॉक्स में एक विशिष्ट आइटम तक कैसे पहुंचें? पृष्ठभूमि में आईओएस एप्लिकेशन क्रियान्वित कार्य अहस्ताक्षरित int बनाम आकार_टी साझा पुस्तकालयों में अपरिभाषित संदर्भों के बारे में सूचित करने के लिए जीसीसी को बल दें टीएफएस में फाइल / निर्देशिकाओं को कैसे नजरअंदाज कर उन्हें केंद्रीय स्रोत भंडार में जाने से बचने के लिए? Android में ImageButton में फ़िट छवि एएसपी.नेट एमवीसी में मास्टर पेज में डेटा पास करना सी मानक का कौन सा भाग इस कोड को संकलित करने की अनुमति देता है? बूस्ट :: एएसआईओ: io_service.run () बनाम पोल () या मैं कैसे बढ़ा सकते हैं :: मुख्य लूप में एएसआईओ बूटस्ट्रैप संतुलन बुलेट कॉलम मैं सी # asp.Net में एक डीटीओ को काफी जटिल जेसन रिस्पांस से कैसे बनाऊं? जावा कोड में "पाश:" यह क्या है, यह संकलन क्यों करता है? सीएसएस 3 एनीमेशन: हॉवर; पूरे एनीमेशन को बल दें X86-64 एबीआई के लिए एक पॉइंटर को 32 बिट ऑफसेट जोड़ते समय कोई चिह्न या शून्य एक्सटेंशन की आवश्यकता है? PHP में preg_match का उपयोग करते समय "अज्ञात संशोधक 'g … में …?

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

मैं 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 से एक ब्राउज़र क्या करता है, इसका अनुकरण करना संभव है। यदि आपके पास वेबसाइट तक पहुंच है, तो सही क्रेडेंशियल का उपयोग करके इसे कनेक्ट करें और फ़ेडरलर का उपयोग करके ट्रैफ़िक को कैप्चर करें। इसके बाद, सुनिश्चित करें कि वेबक्लंट ब्राउज़र के समान सही कुकीज़, अनुरोध हेडर, क्वेरी स्ट्रिंग, आदि को भेजता है।