2012-07-11 14 views
7

veri türünü kullanarak, POST yöntemiyle bir alıcı sunucusuna iOS üzerinde oluşturulmuş yeni bir nesne göndermek istiyorum. IOS'taki numaralı veriden veri alma hakkında bildiğim kadarıyla, tüm JSON işlemenin Apple tarafından iOS 5'in kullanıma sunulması basitleştirildi. Ancak, JSON nesnelerini GETting'e aykırı olarak, POST'leri bulamadım. ... Ben denemek ve aşağıdaki gibi sorun görünüyordu çözmek aldıiOS5'te JSON veri nesnesini sunucuya nasıl POST yaparım?

ilk adımlar:

//build an info object and convert to json 
    NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", language, @"language", nil]; 

    //convert object to data 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:someURLSetBefore]; 
    [request setHTTPMethod:@"POST"]; 
    // any other things to set in request? or working this way? 

    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    // What to do with NSURLConnection? Or how to send differently? 

Ama gerçekten bir POST yöntemini kullanarak bir sunucuya bir JSON nesnesi göndermek nasıl bilmiyorum hiç. Herhangi biri bana yardım edebilir mi?

cevap

16

Etrafa biraz deneyerek dışarı çalıştı, burada benim kod:

//build an info object and convert to json 
    NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", language, @"language", nil]; 

    //convert object to data 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:someURLSetBefore]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setHTTPBody:jsonData]; 

    // print json: 
    NSLog(@"JSON summary: %@", [[NSString alloc] initWithData:jsonData 
                encoding:NSUTF8StringEncoding]); 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [connection start]; 
+0

muhtemelen kodunuzda neler olduğunu üzerinde durmak olabilir mi? Şimdi kendi uygulamasında kullandım, ama ne yaptığımı bilmiyorum. Sözlüğü anladım ve JSON için veriye dönüştürdüm, ancak URLRequest ve URLConnection ile her şey benim için bilinmiyor. Herhangi bir açıklama harika olurdu! – Jonathan

+1

NSURLRequest temel olarak web getirinizin özelliklerini ayarlamak için kullanılan bir nesnedir. Normal getirilerde otomatik olarak en çok kullanılan varsayılan değerlere sahip olursunuz, ancak veri göndermek istediğim gibi HTTP POST yöntemini kullanmak istiyorum ve bir JSON nesnesi almak istiyorum çünkü ben buna İçerik-Türü ayarlayarak sunucuya söylüyorum ve HTTP başlık alanlarını JSON biçimine kabul edin. HTTP protokolü ve özellikle HTTP başlığı hakkında daha fazla bilgi edinmek için sadece onları arayın ya da http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol ve buradan http://en.wikipedia.org/wiki/List_of_HTTP_header_fields okuyun. – CGee

+0

NSURLConnection hakkında daha fazla bilgi edinmek için en iyi yolun, yalnızca Apple Başvuruları belgesinde yer alan http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/ adresindeki sınıf referansını okumak olduğunu düşünüyorum. Reference.html. Genel olarak, sadece ilk önce Elmalar belgelerine bir göz atmanızı öneriyorum, çünkü bu şeyleri öğrenmek için harika bir (ve kesinlikle güncel) kaynak. – CGee

0
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://webstar52.com/demo/webcommunity/work.php"]]]; 
    NSString *post = [NSString stringWithFormat:@"&tag=%@&user_id=%@",@"getcontact",@"10408"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 
    [request setHTTPMethod:@"POST"];  
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 
    [request setHTTPBody:postData]; 
    conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
1

NSString * strUrl = @ "URL"; NSURL * url = [NSURL URLWithString: strUrl];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; 

// For set postdata in string 
NSString *strPatientID = [NSString stringWithFormat:@"%@%@%@%@",self.txtDegit1.text,self.txtDegit2.text,self.txtDegit3.text,self.txtDegit4.text]; 
NSString *deviceToken = @""; 
postString = [NSString stringWithFormat:@"practiceid=%@&email=%@&password=%@&devicetoken=%@",strPatientID,self.txtUsername.text,self.txtPassword.text,deviceToken]; 


NSMutableData *httpDataBody = [NSMutableData data]; 
[httpDataBody appendData:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSString *strPostLength = [NSString stringWithFormat:@"%lu",[httpDataBody length]]; 

if ([httpDataBody length ] > 0){ 

    [request addValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:strPostLength forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:httpDataBody]; 

} 

urlConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
[urlConnection start]; 
2
- (IBAction)txtFetchData2:(id)sender { 
NSString *queryString = [NSString stringWithFormat:@"http://example.com/username.php?name=%@", [self.txtName text]]; 
NSMutableURLRequest *theRequest=[NSMutableURLRequest 
          requestWithURL:[NSURL URLWithString: 
              queryString] 
          cachePolicy:NSURLRequestUseProtocolCachePolicy 
          timeoutInterval:60.0]; 
NSDictionary* jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"Value1", @"Key1", 
           @"Value2", @"Key2", 
           nil]; 
NSError *error; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary 
         options:NSJSONWritingPrettyPrinted error:&error]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
// should check for and handle errors here but we aren't 
[theRequest setHTTPBody:jsonData]; 
[NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    if (error) { 
     //do something with error 
    } else { 
     NSString *responseText = [[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding]; 
     NSLog(@"Response: %@", responseText); 

     NSString *newLineStr = @"\n"; 
     responseText = [responseText stringByReplacingOccurrencesOfString:@"<br />" withString:newLineStr];    
     [self.lblData setText:responseText]; 
    } 
}]; 
} 
İlgili konular