2012-02-22 15 views
17

यहां दी गई अधिकांश जानकारी त्याग किए गए ASIHTTPREQUEST प्रोजेक्ट को संदर्भित करती है, इसलिए मुझे फिर से पूछने के लिए क्षमा करें।सरल उद्देश्य-सी अनुरोध प्राप्त करें

प्रभावी रूप से, मैं (कार्ड की स्थिति के आधार ...)

तो मेरी डेटा एक चुंबकीय पट्टी स्वाइप और एक वेब सेवा है कि रिटर्न "नामांकित" या "notenrolled" करने के लिए ट्रैक 2 डेटा भेजने की जरूरत है बस के रूप में

NSData *data = [notification object]; 

में आता है और फिर मैं इस तो बस आर

http://example.com/CardSwipe.cfc?method=isenrolled&track2=data

के आदेश करने के लिए एक यूआरएल को पारित करने की जरूरत है और एक प्रतिक्रिया स्ट्रिंग eceive ...

मैंने एक टन खोजा है और ऐसा लगता है कि यह केवल AFNetworking, RESTKIT, या देशी NSURL/NSMutableURLRequest प्रोटोकॉल के साथ पूरा किया जाना चाहिए या नहीं।

उत्तर

51

उद्देश्य-सी में HTTP अनुरोध करने के विकल्प थोड़ा डरावना हो सकते हैं। एक समाधान जिसने मेरे लिए अच्छा काम किया है NSMutableURLRequest का उपयोग करना है। एक उदाहरण (, एआरसी का उपयोग कर तो YMMV) है:

- (NSString *) getDataFrom:(NSString *)url{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setHTTPMethod:@"GET"]; 
    [request setURL:[NSURL URLWithString:url]]; 

    NSError *error = nil; 
    NSHTTPURLResponse *responseCode = nil; 

    NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error]; 

    if([responseCode statusCode] != 200){ 
     NSLog(@"Error getting %@, HTTP status code %i", url, [responseCode statusCode]); 
     return nil; 
    } 

    return [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding]; 
} 

अद्यतन:

आपका प्रश्न का शीर्षक, और टैगिंग का कहना है कि पोस्ट है, लेकिन अपने उदाहरण यूआरएल GET अनुरोध का संकेत होगा। जीईटी अनुरोध के मामले में, उपर्युक्त उदाहरण पर्याप्त है। आईओएस 9 के लिए

- (NSString *) getDataFrom:(NSString *)url withBody:(NSData *)body{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:body]; 
    [request setValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setURL:[NSURL URLWithString:url]]; 

    /* the same as above from here out */ 
} 
+0

त्वरित प्रतिक्रिया के लिए ठीक है धन्यवाद। मैं थोड़ा उलझन में हूं कि यह वास्तव में किसी भी डेटा को कैसे पास कर रहा है? एक http सेवा से कनेक्ट करने के लिए एक समारोह की तरह लग रहा है? –

+1

POST नमूना लाइन '[अनुरोध सेट एचटीटीपी बॉडी: बॉडी]' के माध्यम से डेटा पास करता है और HTTP निकाय में आता है। GET उदाहरण URL पर डेटा पास करेगा, इसलिए आपको समय से पहले अपना यूआरएल प्रारूपित करना होगा ... शायद '[NSString stringWithFormat: @ "http://example.com?param1=%@¶m2=%@ ", param1, param2]'। –

+0

तो यह लौटा रहा है "

नामांकित" NSLog जो पेज स्रोत के रूप में एक ही है। वास्तविक पृष्ठ हालांकि नामांकन आउटपुट कर रहा है। मुझे लगता है कि यह इस अर्थ में एक छोटा सा अंतर है कि मैं बाकी सब कुछ पार्स कर सकता हूं, लेकिन क्या यह कोड उचित आउटपुट के बजाय पृष्ठ डेटा लौटा रहा है? –

8

अपडेट:: एक पद के लिए, आप इसे बदल देंगे इस प्रकार तो, [NSURLConnection sendSynchronousRequest] आईओएस 9. से शुरू अब मान्य नहीं है यहाँ कैसे आईओएस 9

से शुरू NSURLSession का उपयोग कर GET अनुरोध करना है

प्राप्त अनुरोध

// making a GET request to /init 
NSString *targetUrl = [NSString stringWithFormat:@"%@/init", baseUrl]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setHTTPMethod:@"GET"]; 
[request setURL:[NSURL URLWithString:targetUrl]]; 

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler: 
    ^(NSData * _Nullable data, 
    NSURLResponse * _Nullable response, 
    NSError * _Nullable error) { 

     NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"Data received: %@", myString); 
}] resume]; 

पोस्ट अनुरोध

// making a POST request to /init 
NSString *targetUrl = [NSString stringWithFormat:@"%@/init", baseUrl]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

//Make an NSDictionary that would be converted to an NSData object sent over as JSON with the request body 
NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: 
        @"basic_attribution", @"scenario_type", 
        nil]; 
NSError *error; 
NSData *postData = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error]; 

[request setHTTPBody:postData]; 
[request setHTTPMethod:@"POST"]; 
[request setURL:[NSURL URLWithString:targetUrl]]; 

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler: 
    ^(NSData * _Nullable data, 
    NSURLResponse * _Nullable response, 
    NSError * _Nullable error) { 

     NSString *responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"Data received: %@", responseStr); 
}] resume]; 
0
**Simply Call and get your JSON Data.** 

-(void)getJSONData 
{ 

NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/us/rss/topaudiobooks/limit=10/json"]; 

NSURLSession *session = [NSURLSession sharedSession]; 

NSURLSessionDataTask *data = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 

    NSError *erro = nil; 

    if (data!=nil) { 

     NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&erro ]; 

     if (json.count > 0) { 

      for(int i = 0; i<10 ; i++){ 

       [arr addObject:[[[json[@"feed"][@"entry"] objectAtIndex:i]valueForKeyPath:@"im:image"] objectAtIndex:0][@"label"]]; 
      } 

     } 
    } 
    dispatch_sync(dispatch_get_main_queue(),^{ 

     [table reloadData]; 
    }); 
}]; 

[data resume]; 
} 
संबंधित मुद्दे