2009-03-12 16 views
6

में प्रमाणीकरण प्रपत्र मैं एक सिस्टम लड़का हूं और वर्तमान में एक अंशकालिक वेब विकास परियोजना कर रहा हूं, इसलिए यह बहुत नया है। मैं www.portapower.com के लिए एक http क्लाइंट लिखने की कोशिश कर रहा हूं।HttpWebRequest और सी #

यह वेबसाइट पर पोस्ट की गई कुछ वस्तुओं के लिए होगा और यदि वे किसी विशेष आवश्यकता से मेल खाते हैं तो यह एक संदेश प्रिंट करेगा।

इस पृष्ठ पर पहुँचने का प्रयास करते समय:

http://www.portapower.com/defaregit.php

यहाँ मैं क्या कोडित का एक टुकड़ा है:

http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

वेबसाइट मुझे एक डिफ़ॉल्ट रजिस्टर पृष्ठ पर रीडायरेक्ट

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()); 

मेरे पास उपयोगकर्ता नाम और पासवर्ड है और ब्राउज़र से उपयोग होने पर यह ठीक काम करता है। कृपया मुझे बताएं कि क्या यह एक प्रमाणित पृष्ठ तक पहुंचने का सही तरीका है।

उत्तर

6

यह इस बात पर निर्भर करता है कि वेबसाइट उपयोगकर्ताओं को प्रमाणीकृत कैसे कर रही है। यदि वे मूल प्रमाणीकरण या विंडोज प्रमाणीकरण का उपयोग कर रहे हैं, तो आप उपयोगकर्ता नाम/पासवर्ड/डोमेन जानकारी पर HttpWebRequest class के Credentials property सेट कर सकते हैं और इसे काम करना चाहिए।

हालांकि, ऐसा लगता है कि आपको साइट पर उपयोगकर्ता नाम/पासवर्ड दर्ज करना होगा, जिसका अर्थ है कि आपको पहले साइट पर लॉगिन करना होगा।

<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> 

मैं केवल प्रासंगिक अंश शामिल किए हैं: मुख्य पृष्ठ को देखते हुए, यह मैं <form> तत्व यह है कि प्रवेश के हैंडल में क्या लगता है।

इस देखते हुए, आप HttpWebRequest और पोस्ट emtext और pstext मूल्यों के साथ पहले ./defalogin.php पृष्ठ पर जाने के लिए है। साथ ही, सुनिश्चित करें कि आप CookieContainer property को CookieContainer के उदाहरण पर सेट करें। जब POST रिटर्न पर कॉल किया जाता है, तो यह उस कुकी के साथ पॉप्युलेट होने की संभावना से अधिक है जिसे आपको साइट पर वापस भेजना होगा। कुकीज़ को पारित करने के लिए बस CookieContainer पर उदाहरणों पर CookieContainer प्रॉपर्टी को CookieContainer पर सेट करना जारी रखें।

फिर आप लिंक में बताए गए पृष्ठ पर जाएंगे।

चिंता का भी logincheck जावास्क्रिप्ट फ़ंक्शन है, लेकिन स्क्रिप्ट स्रोतों को देखते हुए, यह कुछ भी नोट नहीं करता है।

0

नेटवर्क क्रेडेंशियल क्लास वास्तव में नियमित विंडोज क्रेडेंशियल्स (एनटीएलएम, केर्बेरोस इत्यादि) को नियंत्रित करने के लिए है।

यह साइट अपाचे पर चल रही एक PHP साइट है, इसलिए मुझे नहीं लगता कि वे एनटीएलएम या केर्बेरो का उपयोग कर रहे हैं।

आप जो करना चाहते हैं वह साइट पर कुछ फॉर्म फ़ील्ड पोस्ट करें, फिर कुकी को वापस रखें। बाद के अनुरोधों पर सुनिश्चित करें कि आप कुकी को साइट पर वापस धक्का दें ताकि यह पता चले कि आप पहले ही लॉग इन हैं।

1

आप इसे इस तरह से नहीं कर सकते हैं; आपके द्वारा पारित किए जाने वाले प्रमाण-पत्रों का उपयोग मूल प्रमाणीकरण योजना (यानी, ब्राउज़र में, आपको उपयोगकर्ता नाम/पासवर्ड संवाद पॉप-अप मिलता है) के साथ उपयोग किया जा सकता है।) आपको उस फ़ॉर्म में डेटा की प्रविष्टि अनुकरण करना होगा और पकड़ लेंगे लॉगिन कुकी और इसका इस्तेमाल करें।

2

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

इस उत्तर को देखें, जिसमें यह कोड है:

Login to the page with HttpWebRequest