2010-01-13 13 views
34

मैं एक पायथन ऐप पोर्ट करना चाहता हूं जो आईफोन के लिए मशीनीकरण का उपयोग करता है। कुछ ऐप प्राप्त करने के लिए इस ऐप को उस साइट पर अन्य पृष्ठों पर जाने के लिए वेबपेज में लॉगिन करने और साइट कुकी का उपयोग करने की आवश्यकता है।आईफोन पर HTTP कुकीज़ प्रबंधित करना

मेरे पायथन ऐप के साथ मैं स्वचालित कुकी प्रबंधन के लिए मशीनीकरण का उपयोग कर रहा था। क्या उद्देश्य सी के लिए कुछ ऐसा है जो आईफोन के लिए पोर्टेबल है?

किसी भी मदद के लिए धन्यवाद।

+1

ए * पायथन * ऐप? 'डब्ल्यूडब्ल्यूडब्ल्यू :: मैकेनाइज' एक पर्ल लाइब्रेरी है। –

+3

एक अजगर बंदरगाह भी है। http://wwwsearch.sourceforge.net/mechanize/ – dan

उत्तर

72

NSURLConnection आपको कुकी प्रबंधन मुफ्त में देता है। URL Loading System Programming Guide से:

यूआरएल लोडिंग सिस्टम स्वचालित रूप से NSURLRequest के लिए उपयुक्त किसी भी संग्रहीत कुकीज़ भेजता है। जब तक अनुरोध कुकीज़ भेजने के लिए निर्दिष्ट नहीं करता है। इसी तरह, NSRLResponse में लौटाई गई कुकीज़ वर्तमान कुकी स्वीकृति नीति के अनुसार स्वीकार की जाती हैं।

+4

+1 यह सही उत्तर होना चाहिए। –

+0

मैं कैसे जांचूं कि NSRLRequest कुकीज़ के साथ भेजता है या नहीं? कंसोल पर लॉग इन कैसे करें? – trillions

+3

देखें '- [NSHTTPCookieStorage कुकीज़ForURL:] '। –

43

आप वेबसाइट लॉगिन करने के लिए HTTP अनुरोध करने के लिए NSURLConnection क्लास का उपयोग कर सकते हैं और कुकी पुनर्प्राप्त कर सकते हैं। अनुरोध करने के लिए, बस NSURLConnection का एक उदाहरण बनाएं और इसे एक प्रतिनिधि ऑब्जेक्ट असाइन करें।

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

फिर, एक प्रतिनिधि विधि को लागू करें।

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:@"Set-Cookie"]; // It is your cookie 
} 

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

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:@"Cookie"]; 
+26

आपको ऐसा करने की आवश्यकता नहीं है, NSURLConnection स्वचालित रूप से तब तक स्टोर करता है और कुकीज़ भेजता है जब तक आप इसे स्पष्ट रूप से नहीं बताते। – benzado

+1

हालांकि यह आवश्यक नहीं होना चाहिए आईओएस 4.2 जीएम –

+0

में एक संदिग्ध बग तय किया गया है कि कोई कैसे पता लगाएगा कि सत्र क्लाइंट-साइड समाप्त हो गया है? हमें किस कॉलबैक की उम्मीद करनी चाहिए? या यह सिर्फ यह देखने की बात है कि अनुरोध (उस सत्र आईडी के साथ) सफल हुआ या नहीं? – Cole

0

@ ज़ोनबल का जवाब केवल मेरे लोकहोस्ट में काम करता है; यदि सर्वर स्थानीय रूप से नहीं चल रहा है, तो NSDictionary * फ़ील्ड = [HTTPResponse allHeaderFields] से "सेट-कुकी" शीर्षलेख अनुपलब्ध है;

अंत में मैंने पाया कि @ बेंजाडो का समाधान ठीक काम करता है। यह भी देखें: iphone nsurlconnection read cookies @Tal Bereznitskey का जवाब।

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