2008-11-05 10 views
11

मेरे पास सर्वर पर चल रही एक वेब सेवा है जो या तो XML प्रारूप या JSON प्रारूप में डेटा लौटाती है। मैं एक JSON प्रारूप का अनुरोध करना चाहता था लेकिन HTTP पोस्ट विधि का उपयोग करना चाहता था।आईफोन एप्लिकेशन के जवाब में JSON ऑब्जेक्ट प्राप्त करने के लिए मैं HTTP पोस्ट अनुरोध कैसे कर सकता हूं?

किसी भी मदद की बहुत सराहना की।

अग्रिम धन्यवाद।

उत्तर

30

इस कोड को जो JSON पोस्ट अनुरोध के लिए काम करते हैं, TouchJSON फ्रेमवर्क JSON, धन्यवाद 'स्च्वा' पार्स करने के लिए प्रयोग किया जाता है।

NSArray *keys = [NSArray arrayWithObjects:@"username", @"password", @"preference", @"uid", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"accuser", @"accpass", @"abc_region", @"100", nil]; 
NSDictionary *theRequestDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

NSURL *theURL = [NSURL URLWithString:@"http://url.com/request.php"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f]; 
[theRequest setHTTPMethod:@"POST"]; 

[theRequest setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"]; 
NSString *theBodyString = [[CJSONSerializer serializer] serializeDictionary:theRequestDictionary]; 
NSLog(@"%@", theBodyString); 
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; 
// NSLog(@"%@", theBodyData); 
[theRequest setHTTPBody:theBodyData]; 

NSURLResponse *theResponse = NULL; 
NSError *theError = NULL; 
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError]; 
NSString *theResponseString = [[[NSString alloc] initWithData:theResponseData encoding:NSUTF8StringEncoding] autorelease]; 
NSLog(theResponseString); 
NSDictionary *theResponseDictionary = [[CJSONDeserializer deserializer] deserialize:theResponseString]; 
NSLog(@"%@", theResponseDictionary); 
NSString *theGreeting = [theResponseDictionary objectForKey:@"greeting"]; 
[self setValue:theGreeting forKey:@"greeting"]; 
+1

"अन्यRequest" शब्दकोश का उद्देश्य क्या है? ऐसा अप्रयुक्त प्रतीत होता है। –

+0

इसे हटा दिया गया है। –

3

वास्तव में यह सुनिश्चित नहीं है कि आपका प्रश्न वास्तव में क्या है। लेकिन Google "TouchJSON" जो आपको प्रारंभ करने में मदद कर सकता है।

+0

यह करने के लिए आप TouchJSON का उपयोग कैसे कर सकते हैं? –

0

त्रुटियों और मेमोरी लीक के लिए क्षमा करें, लेकिन कैसे की तरह कुछ के बारे में:

CFURLRef url = CFURLCreateWithString(NULL, CFSTR("http://example.com/post"), NULL); 
CFHTTPMessageRef msg = CFHTTPMessageCreateRequest(
    NULL, 
    CFSTR("POST"), 
    url, 
    kCFHTTPVersion1_1); 

const char *body = "key=value&id=30293"; 
CFDataRef bodyData = CFDataCreate(NULL, body, strlen(body)); 
CFHTTPMessageSetBody(msg, bodyData); 

CFReadStreamRef myReadStream = CFReadStreamCreateForHTTPRequest(NULL, myRequest); 
CFReadStreamOpen(myReadStream); 
CFHTTPMessageRef myResponse = CFReadStreamCopyProperty(
    myReadStream, 
    kCFStreamPropertyHTTPResponseHeader); 

// 
// Handle myResponse 
// 

CFReadStreamClose(myReadStream); 
CFRelease(myReadStream); 
CFRelease(bodyData); 
CFRelease(msg); 
CFRelease(url); 
+0

वास्तव में कार्बन-आईश समाधान यहां - आईफोन पर बहुत अच्छी तरह से काम नहीं करेगा। –

+0

वह कोर फाउंडेशन है, कार्बन नहीं। सीएफनेटवर्क (जो कि है) आईओएस पर ठीक काम करता है। मैं कोको समाधान को पसंद नहीं करूंगा, लेकिन पहली नज़र में मुझे इस कोड के साथ कुछ भी गलत नहीं दिख रहा है। कोर फाउंडेशन कई बार बहुत उपयोगी है। –

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

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