2010-11-11 12 views
9

मेरे पास एक विनफॉर्म एप्लिकेशन है जो मैं उपभोक्ता खातों पर कई परीक्षण चलाता हूं। निष्पादित करने के लिए परीक्षणों को एक बार लॉगिन की आवश्यकता होती है।सी # कुकीज़ का उपयोग कर WebRequest

string paramaters = "authmethod=on&chkRememberMe=on&login-form-type=pwd&password=" + pw.Text + "&userid=" + uid.Text + "&username=" + uid.Text; 
     string strResponse; 
     HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://www.url.com/login.form"); 
     requestLogin.Method = "POST"; 
     requestLogin.CookieContainer = cookieJar; 
     requestLogin.ContentType = "application/x-www-form-urlencoded"; 

     requestLogin.ContentLength = paramaters.Length; 
     StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(paramaters); 
     stOut.Close(); 

     StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream()); 
     strResponse = stIn.ReadToEnd(); 
     stIn.Close(); 

यह स्क्रिप्ट लॉगिन करने के लिए बस ठीक काम करता है, समस्या यह है जब मैं वास्तव में परीक्षण मैं एक स्ट्रिंग (एचटीएमएल परिणाम) में सभी परिणाम वापस करने की जरूरत को चलाने के लिए की जरूरत है।

private string runTestRequest(Uri url, string parameters) 
    { 
     string testResults = string.Empty; 
     HttpWebRequest runTest = (HttpWebRequest)WebRequest.Create(url); 
     runTest.CookieContainer = cookieJar; 
     runTest.Method = "POST"; 
     runTest.ContentType = "application/x-www-form-urlencoded"; 
     StreamWriter stOut = new StreamWriter(runTest.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(parameters); 
     stOut.Close(); 
     StreamReader stIn = new StreamReader(runTest.GetResponse().GetResponseStream()); 
     testResults = stIn.ReadToEnd(); 
     stIn.Close(); 
     return testResults; 
    } 

लेकिन यह जाता है और लॉगिन करने का प्रयास करता है। मैं इस + कई अन्य वेब अनुरोधों के साथ पिछले लॉगिन अनुरोध से कुकी का उपयोग कैसे कर सकता हूं?

सहायता के लिए धन्यवाद।

संपादित करें:

मैं अपने कोड को यह जोड़ा अभी तक जो BrokenGlass के रूप में सिर्फ एक छोटे से अलग छोड़कर कह रहा है एक ही बात करना चाहिए, लेकिन अभी भी काम नहीं करता।

foreach (Cookie cookie in responseLogin.Cookies) 
     { 
      cookieJar.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), cookie.Path, cookie.Domain)); 
      richTextBox2.Text += cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString(); 
     } 
+0

आप की जाँच की थी क्या cookieJar में जब नया अनुरोध चल रहा है? क्या इसमें कुछ भी शामिल है? – Artemiy

+0

मैंने एक संदेशबॉक्स किया था। दिखाएं (cookieJar.Count.ToString()); और यह दिखाता है कि गणना 2 – Alex

उत्तर

21

कुछ इस तरह काम करना चाहिए, मैं इसी तरह के कोड का उपयोग कर रहा एक लॉगिन कुकी को बचाने के लिए:

HttpWebRequest runTest; 
//...do login request 
//get cookies from response 

CookieContainer myContainer = new CookieContainer(); 
for (int i = 0; i < Response.Cookies.Count; i++) 
{ 
    HttpCookie http_cookie = Request.Cookies[i]; 
    Cookie cookie = new Cookie(http_cookie.Name, http_cookie.Value, http_cookie.Path); 
    myContainer.Add(new Uri(Request.Url.ToString()), cookie); 
} 

//later: 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.url.com/foobar"); 
request.CookieContainer = myContainer; 
+0

है मुझे नहीं लगता कि मैं समझता हूं कि आपके विचार को कैसे कार्यान्वित किया जाए। रनटेस्ट अनुरोध प्रारंभिक लॉगिन के बाद किया जाएगा, और मुझे कुकीज़ के नाम पता नहीं हैं। क्या आप अधिक विस्तार से जा सकते हैं? – Alex

+0

@Alex: मैंने http कुकीज के लिए अपना जवाब संशोधित किया - मेरी प्रारंभिक प्रतिक्रिया मैंने एसओएपी सेवा के उपयोग से अनुकूलित किया जहां आप लॉगिन अनुरोध कर सकते हैं और फिर उसी वैरिएबल से कुकीज़ प्राप्त कर सकते हैं – BrokenGlass

+0

मुझे यकीन नहीं है कि मैं वास्तव में कहां फिट होगा मेरे साथ कोड। मेरे पास "प्रतिक्रिया" चर नहीं है और मेरा एप्लिकेशन समझ में नहीं आता है कि HttpCookie क्या है। फिर से मदद के लिए धन्यवाद। – Alex

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