2012-03-30 15 views
13

मैं न्यूज़स्टैंड एप्लिकेशन विकसित कर रहा हूं और समस्या संपत्तियों को डाउनलोड करने के लिए NSURLRequest का उपयोग कर रहा हूं।NSURLRequest कुकीज़ नहीं भेजता

NSArray *contents = [issue.tableOfContents objectForKey:kSNTableOfContentsContents]; 
NSHTTPCookie *cookie; 
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
NSLog(@"HERE GO MY COOKIES"); 
for (cookie in [cookieJar cookies]) { 
    NSLog(@"%@", cookie); 
}    
for (NSDictionary *contentItem in contents) { 
    NSString *contentURL_string = [contentItem objectForKey:kSNTableOfContentsRemoteURL]; 
    NSURL *contentURL = [NSURL URLWithString:contentURL_string]; 
    NSString *fileName = [contentItem objectForKey:kSNTableOfContentsContentsURL];  
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:contentURL]; 
    NKAssetDownload *asset = [newsstandIssue addAssetWithRequest:request]; 
    [request release]; 
    .... 
    [asset downloadWithDelegate:self]; 
    .... 
} 

जब पाश के लिए पहले निष्पादित किया जाता है मेरी कुकीज़ NSHTTPCookieStorage में दिखाई देते हैं, लेकिन जब वास्तविक अनुरोध भेजा जाता है, वहाँ हेडर में कोई कुकी जानकारी कर रहे हैं। मैं इसे देखने के लिए चार्ल्सप्रॉक्सी का उपयोग करता हूं। क्या कोई इस सलाह के कारण कुछ सलाह दे सकता है?

+0

आप इसे मैन्युअल रूप से करने का प्रयास कर सकते हैं: http://stackoverflow.com/questions/5954382/ios-is-it-possible-to -सेट-ए-कुकी-मैन्युअल-उपयोग-साझाhttpcookiestorage-for- –

+0

धन्यवाद, मैं कोशिश करूंगा। –

उत्तर

18

this thread से, जादू मंत्र प्रतीत होता है:

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies: 
    [cookieJar cookies]]; 
[request setAllHTTPHeaderFields:headers]; 

(चेतावनी: अपरीक्षित कोड।)

इस हेडर की एक NSDictionary तो कुकीज़ की एक सरणी में अपने कुकी जार में परिवर्तित कर देंगे, , और अंत में, उन शीर्षकों को अपने अनुरोध पर प्रमुख बनाएं। यह मैन्युअल रूप से ऐसा करने के लिए तुलनीय है, क्योंकि एडम शिमेके ने प्रश्न इरेटा में जुड़ा हुआ है, लेकिन मेरी राय में बहुत साफ है।

the documentation के अनुसार, आप यह भी देखने के लिए HTTPShouldHandleCookies देख सकते हैं कि आपकी डिफ़ॉल्ट कुकी नीति का उपयोग ठीक से किया जा रहा है या नहीं।

+1

किसी मालिक की तरह काम करता है, लेकिन आपको ध्यान रखना चाहिए कि OPA को सेटएएलएचटीटीपीएचडर फ़ील्ड विधि का उपयोग करने में सक्षम होने के लिए एक एनएसएमयूटेबलURLआरक्वेट बनाना होगा। सीधे शब्दों में 'NSURLRequest * अनुरोध = बदल [[NSURLRequest alloc] initWithURL: contentURL];' को 'NSMutableURLRequest * अनुरोध = [[NSMutableURLRequest alloc] initWithURL: contentURL];' – RobP

+0

भी, यह एक महान अवसर की तरह लगता है एक श्रेणी के लिए, और एक सुविधा विधि जिसका उपयोग '[myMutableURLRequest addAllCookies]' – RobP

+0

विस्मयकारी +1 @MrGomez – mkabatek

1

आईओएस परियोजनाओं पर मुझे इस तरह की समस्याओं के लिए ASIHTTPRequest बहुत उपयोगी पाया गया। यह प्रमाणीकरण और कुकीज़ जैसी चीजें बहुत बेहतर बनाता है कि बिल्ड-इन फ़ंक्शंस: http://allseeing-i.com/ASIHTTPRequest/

+0

के साथ उपयोग कर सकता है धन्यवाद, मैं इसका भी उपयोग करता हूं, लेकिन मुझे इसे न्यूजस्टैंड के साथ काम करने का कोई तरीका नहीं मिला किट। क्या आप जानते हैं कि वे एक साथ काम कर सकते हैं? –

+0

यकीन नहीं है, मैंने अभी तक इस संयोजन का उपयोग नहीं किया है। आप http://allseeing-i.com/ASIHTTPRequest/How-to-use#persistent_cookies –

+1

पर अधिक जानकारी प्राप्त कर सकते हैं ASIHTTPRequest अब बेन कॉप्सी द्वारा समर्थित नहीं है, जिन्होंने इसे लिखा (अंतिम अपडेट मई 2011) और वह इसका उपयोग करने की अनुशंसा नहीं करता है नई परियोजनाएं – joneswah

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