2010-11-22 10 views
5

मैं हेडर "सेट-कुकी" प्राप्त करने या कुकी कंटेनर तक पहुंचने का प्रयास कर रहा हूं, लेकिन सेट-कुकी हेडर उपलब्ध नहीं है। कुकी प्रतिक्रिया शीर्षलेख में है, लेकिन यह क्लाइंट अनुरोध ऑब्जेक्ट में नहीं है।प्रतिक्रिया में HttpWebRequest और सेट-कुकी शीर्षलेख पार्स नहीं किया गया (WP7)

var webRequest = (HttpWebRequest)result.AsyncState; 
raw = webRequest.EndGetResponse(result) as HttpWebResponse; 
foreach (Cookie c in webRequest.CookieContainer.GetCookies(webRequest.RequestUri)) 
{ 
    Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value); 
} 

मैं भी हेडर को देखकर की कोशिश की है, लेकिन:

HTTP/1.1 200 OK 
Content-Type: application/xml; charset=utf-8 
Connection: keep-alive 
Status: 200 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.0.pre4 
ETag: "39030a9c5a45a24e485e4d2fb06c6389" 
Client-Version: 312, 105, 0, 0 
X-Runtime: 44 
Content-Length: 1232 
Set-Cookie: _CWFServer_session=[This is the session data]; path=/; HttpOnly 
Cache-Control: private, max-age=0, must-revalidate 
Server: nginx/0.7.67 + Phusion Passenger 3.0.0.pre4 (mod_rails/mod_rack) 

<?xml version="1.0" encoding="UTF-8"?> 
<user> 
... 
</user> 

मेरे कॉलबैक कोड की तरह कुछ में शामिल हैं: मैं ClientHttp

bool httpResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 

यहाँ का उपयोग कर ढेर दर्ज की हूँ प्रतिक्रिया है सेट-कुकी हेडर प्रतिक्रिया में मौजूद नहीं है।

समस्या के बारे में कोई सुझाव क्या हो सकता है?

+0

"सेट-कुकी" हेडर WP7 पर भी मेरे HttpWebResponses से अनुपलब्ध प्रतीत होता है। – Curyous

उत्तर

-1

आपको हेडर संग्रह सीधे संपादित करना होगा। कुछ इस तरह:

CookieContainer container = new CookieContainer(); 
container.Add(new Uri("http://yoursite"), new Cookie("name", "value")); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yoursite"); 
request.CookieContainer = container; 
request.BeginGetResponse(new AsyncCallback(GetData), request); 
+0

यदि आप अनुरोध से पहले कुछ करने के लिए हेडर सेट करना चाहते थे, तो मैंने कोशिश की कि इसका कोई फायदा न हो। –

6

स्पष्ट रूप से एक नया CookieContainer गुजर का प्रयास करें? यदि ऐसा है, तो आप इसे देखने में सक्षम नहीं होंगे, लेकिन यदि आप अपने दूसरे अनुरोध के लिए एक ही कुकी कंटनर का उपयोग करते हैं, तो अनुरोध में कुकी होगी, भले ही आपका प्रोग्राम इसे देखने में सक्षम न हो।

+0

क्या आप मेरी मदद कर सकते हैं? GetData() क्या फ़ंक्शन है? (आपकी आखिरी पंक्ति में) –

+0

'गेटडाटा' इस मामले में एक डमी फ़ंक्शन है - आप बस अपना स्वयं का कॉलबैक बना सकते हैं। –

0

कुकी केवल Http है:

request.Headers["Set-Cookie"] = "name=value"; 

request.BeginGetResponse(myCallback, request); 
2

आप केवल Http प्राप्त कर रहे हैं कुकीज़:

Set-Cookie: _CWFServer_session=[This is the session data]; path=/; HttpOnly 

सुरक्षा कारणों से, उन कुकीज़ कोड से पहुँचा जा सकता है, लेकिन आप अभी भी HttpWebRequest के लिए अपने अगले कॉल में उन्हें इस्तेमाल कर सकते हैं। यहां पर अधिक: Reading HttpOnly Cookies from Headers of HttpWebResponse in Windows Phone

WP7.1 के साथ, मुझे गैर-केवल कुकीज़ पढ़ने में समस्याएं भी थीं। मुझे पता चला कि वे उपलब्ध नहीं हैं अगर HttpWebRequest की प्रतिक्रिया कैश से आता है। क्वेरी एक यादृच्छिक संख्या के साथ अद्वितीय हल बनाना कैश समस्या:

// The Request 
Random random = new Random(); 
// UniqueQuery is used to defeat the cache system that destroys the cookie. 
_uniqueQuery = "http://my-site.somewhere?someparameters=XXX" 
     + ";test="+ random.Next(); 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_uniqueQuery); 
request.BeginGetResponse(Response_Completed, request); 

एक बार जब आप प्रतिक्रिया मिल, आप प्रतिक्रिया हेडर से कुकी लाने कर सकते हैं:

void Response_Completed(IAsyncResult result) 
{ 
    HttpWebRequest request = (HttpWebRequest)result.AsyncState; 
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result); 
    String header = response.Headers["Set-Cookie"]; 

मैं कभी नहीं CookieContainer पाने में कामयाब रहे काम करने के लिए .GetCookies() विधि।

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