2011-02-02 13 views
6

मैं इस पृष्ठ के लिए डेटा भेजने के लिए कोशिश कर रहा हूँ के साथ HttpWebRequest का उपयोग कर:डेटा भेजने HttpWebRequest वर्ग का उपयोग करके एक प्रवेश पृष्ठ

www.stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp 

लेकिन मैं लॉगिन प्रमाणीकरण के साथ एक समस्या का सामना करना पड़ा। heres मेरी कोड:

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
    string postData = "ctlMessageID=" + 348; 
    postData += ("&ctlUserID=" + 7); 
    postData += ("&ctlTitle=" + 7); 
    postData += ("&ctlEmail=" + "[email protected]"); 
    postData += ("&ctlIsSystem=" + 0); 
    postData += ("&ctlFormBody="); 
    postData += ("&ctlEnableCaptcha="); 
    postData += ("&ctlEmailAttachedFiles="); 
    postData += ("&ctlMailingList="); 
    postData += ("&ctlCommentaryTitle=" + 1); 
    postData += ("&ctlIsActive=" + 2); 
    postData += ("&ctlCommentaryPersonID=" + 6); 
    postData += ("&ctlOrderKey="); 
    postData += ("&Commentary_TextControl_html=" + "aaaaaaaaaaaa"); 
    postData += ("&controlValue4=" + 666666); 
    postData += ("&ctlLanguageID=" + 1); 
    postData += ("&ctlAya=" + 349); 
    postData += ("&PathInfo=" + "dbsFramed, dbsFramed"); 
    postData += ("&Caller=" + "rawhi"); 
    byte[] data = encoding.GetBytes(postData); 

    // Prepare web request... 
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp"); 
    myRequest.Method = "POST"; 
    myRequest.ContentType = "application/x-www-form-urlencoded"; 
    myRequest.ContentLength = data.Length; 
    Stream newStream = myRequest.GetRequestStream(); 
    // Send the data. 
    newStream.Write(data, 0, data.Length); 
    newStream.Close(); 

और यह लॉग इन पृष्ठ है:

www.stage1.darotools.com/Quran.v1.admin/Login.asp 

अग्रिम धन्यवाद।

+0

कोई भी मदद नहीं कर सकता है? – Rawhi

+0

आपको लॉग इन करने के लिए किस प्रकार का प्रमाणीकरण उपयोग किया जा रहा है? ऐसा लगता है कि आप किसी भी प्रमाण पत्र की आपूर्ति कर रहे हैं? इसके अलावा, पोस्टडाटा एक स्ट्रिंगबिल्डर होना चाहिए। इस तरह के तारों को समेकित करना बुरा अभ्यास है। – TimC

+0

अकेले बुरे अभ्यास को छोड़ दें, मेरी समस्या यह है कि लॉगिन पृष्ठ वास्तव में वास्तविक लॉगिन पृष्ठ नहीं है बल्कि इसके बजाय यह किसी अन्य वेबपृष्ठ 'PostLogin.asp' पर रीडायरेक्ट करता है, जिसमें इसकी मुख्य पृष्ठ पर रीडायरेक्ट होता है। मैंने कुकीज़ सामान का उपयोग करने की कोशिश की है लेकिन यह मेरे लिए भी काम नहीं करता है। – Rawhi

उत्तर

1

प्रयास करें:

myRequest.Credentials = new NetworkCredential("username", "password", "domain"); // domain is not needed in case of forms authentication 

यह आप प्रवेश पृष्ठ पर उपयोगकर्ता को प्रमाणित कर सकते हैं काम नहीं करता है और वहां कुकी कुकीर को पास करना और उसके बाद आवश्यक पेज का अनुरोध करते समय कुकी कंटनर का पुन: उपयोग करें।

+0

मुझे विश्वास नहीं था कि यह आसान था। –

0

वहाँ कुछ अलग चीजें हैं जो यहाँ

कुछ साख

myRequest.Credentials = CredentialCache.DefaultCredentials; 

// if we have a proxy set its creds as well 
if(myRequest.Proxy != null) 
{ 
    myRequest.Proxy.Credentials = CredentialCache.DefaultCredentials; 
} 

और सुनिश्चित करें कि आप एक UserAgent और accpet सेटिंग्स के रूप में अच्छी तरह से स्थापित कर रहे हैं बनाने की स्थापना हो रहा जा सकता है की कोशिश करो हैं।

myRequest.UserAgent = "Foo"; 
myRequest.Accept = "*/*"; 

यदि आप इन्हें जोड़ते हैं तो मुझे नहीं लगता कि आपको कोई समस्या होगी।

4

सबसे पहले, ऐसा लगता है कि आप वास्तव में अनुरोध नहीं भेज रहे हैं। सर्वर आप प्रतिक्रिया अनुरोध करने की आवश्यकता करने के लिए पोस्ट अनुरोध भेजने के लिए:

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse(); 
string responseContent = null; 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    //get the text content of the response, if needed 
    responseContent = reader.ReadToEnd(); 
} 

इसके अलावा, यह पेज आप एक स्थापित और प्रमाणीकृत सत्र की तलाश में है पोस्ट कर रहे हैं की तरह लग रहा है। लॉगिन पेज पर क्रेडेंशियल्स पोस्ट करने का प्रयास करें (http://stage1.darotools.com/Quran.v1.admin/Login.asp) पहले। एक नया कुकी नियंत्रक() उदाहरण के लिए HttpWebRequest.CookieContainer सेट करें। फिर, CreateForm.asp पृष्ठ पर एक और पोस्ट करें, लेकिन जब आप लॉगिन पेज पर पोस्ट करते हैं तो कुकी कुकीकेंटर के उसी उदाहरण का उपयोग करने के लिए नया HttpWebRequest.CookieContainer ऑब्जेक्ट सेट करना सुनिश्चित करें। फिर लॉगिन पेज से प्राप्त कुकीज़ को CreateForm.asp पृष्ठ पर भेजा जाएगा और सत्र सर्वर के परिप्रेक्ष्य से "बनाए रखा" जाएगा। उदाहरण के लिए:

CookieContainer m_cookies = new CookieContainer(); 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/Login.asp"); 
... 

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse(); 
HttpWebRequest formRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp"); 
formRequest.CookieContainer = myRequest.CookieContainer; 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    //get the text content of the response, if needed 
    responseContent = reader.ReadToEnd(); 
} 
+0

मैंने यह भी कोशिश की है, लेकिन हर बार जब मुझे CreatForm पृष्ठ की आवश्यकता होती है तो यह मुझे लॉगिन पेज में रीडायरेक्ट करता है जिसमें केवल लॉगिन फॉर्म होता है और वास्तविक लॉगिन पृष्ठ PostLogin.asp में संभाला जाता है। – Rawhi

संबंधित मुद्दे