¿Cómo enviar una solicitud POST y GET?

Deseo enviar mi JSON a una URL ( POST y GET ).

 NSMutableDictionary *JSONDict = [[NSMutableDictionary alloc] init]; [JSONDict setValue:"myValue" forKey:"myKey"]; NSData *JSONData = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:nil]; 

Mi código de solicitud actual no está funcionando.

 NSMutableURLRequest *requestData = [[NSMutableURLRequest alloc] init]; [requestData setURL:[NSURL URLWithString:@"http://fake.url/"];]; [requestData setHTTPMethod:@"POST"]; [requestData setValue:postLength forHTTPHeaderField:@"Content-Length"]; [requestData setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [requestData setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [requestData setHTTPBody:postData]; 

Usar ASIHTTPRequest no es una respuesta responsable.

Enviar POST y GET en iOS es bastante fácil; y no hay necesidad de un marco adicional.


Solicitud POST :

Comenzamos creando el body nuestro POST (es decir body lo que nos gustaría enviar) como un NSString y convirtiéndolo en NSData .

C objective

 NSString *post = [NSString stringWithFormat:@"test=Message&this=isNotReal"]; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

A continuación, leemos la postData la postData , para que podamos pasarla en la solicitud.

 NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

Ahora que tenemos lo que nos gustaría publicar, podemos crear una NSMutableURLRequest e incluir nuestro postData .

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:@"http://YourURL.com/FakeURL"]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData]; 

rápido

 let post = "test=Message&this=isNotReal" let postData = post.data(using: String.Encoding.ascii, allowLossyConversion: true) let postLength = String(postData!.count) var request = URLRequest(url: URL(string: "http://YourURL.com/FakeURL/PARAMETERS")!) request.httpMethod = "POST" request.addValue(postLength, forHTTPHeaderField: "Content-Length") request.httpBody = postData; 

Y finalmente, podemos enviar nuestra solicitud y leer la respuesta creando una nueva NSURLSession :

C objective

 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"Request reply: %@", requestReply); }] resume]; 

rápido

 let session = URLSession(configuration: .default) session.dataTask(with: request) {data, response, error in let requestReply = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) print("Request reply: \(requestReply!)") }.resume() 

Solicitud GET :

Con la solicitud GET es básicamente lo mismo, solo que sin HTTPBody y Content-Length .

C objective

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:@"http://YourURL.com/FakeURL/PARAMETERS"]]; [request setHTTPMethod:@"GET"]; NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"Request reply: %@", requestReply); }] resume]; 

rápido

 var request = URLRequest(url: URL(string: "http://YourURL.com/FakeURL/PARAMETERS")!) request.httpMethod = "GET" let session = URLSession(configuration: .default) session.dataTask(with: request) {data, response, error in let requestReply = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) print("Request reply: \(requestReply!)") }.resume() 

En una nota lateral, puede agregar Content-Type (y otros datos) agregando lo siguiente a nuestra NSMutableURLRequest . Esto podría ser requerido por el servidor al solicitar, por ejemplo, un json .

C objective

 [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

El código de respuesta también se puede leer usando [(NSHTTPURLResponse*)response statusCode] .

rápido

 request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") 

Actualización: sendSynchronousRequest está en desuso en ios9 y osx-elcapitan (10.11) y fuera.

 NSURLResponse *requestResponse; NSData *requestHandler = [NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:nil]; NSString *requestReply = [[NSString alloc] initWithBytes:[requestHandler bytes] length:[requestHandler length] encoding:NSASCIIStringEncoding]; NSLog(@"requestReply: %@", requestReply); 

Al usar RestKit puede realizar una solicitud POST simple (consulte esta página de GitHub para obtener más información).

Importar RestKit en su archivo de encabezado.

 #import  

Entonces puede comenzar creando una nueva RKRequest .

 RKRequest *MyRequest = [[RKRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://myurl.com/FakeUrl/"]]; 

Luego, especifique qué tipo de solicitud desea realizar (en este caso, una solicitud POST ).

 MyRequest.method = RKRequestMethodPOST; MyRequest.HTTPBodyString = YourPostString; 

Y luego configure su solicitud como un JSON en additionalHTTPHeaders .

 MyRequest.additionalHTTPHeaders = [[NSDictionary alloc] initWithObjectsAndKeys:@"application/json", @"Content-Type", @"application/json", @"Accept", nil]; 

Finalmente, puedes enviar la solicitud.

 [MyRequest send]; 

Además, puede NSLog su solicitud para ver el resultado.

 RKResponse *Response = [MyRequest sendSynchronously]; NSLog(@"%@", Response.bodyAsString); 

Fuentes: RestKit.org y Me .

  -(void)postmethod { NSString * post =[NSString stringWithFormat:@"Email=%@&Password=%@",_txt_uname.text,_txt_pwd.text]; NSData *postdata= [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *postLength=[NSString stringWithFormat:@"%lu",(unsigned long)[postdata length]]; NSMutableURLRequest *request= [[NSMutableURLRequest alloc]init]; NSLog(@"%@",app.mainurl); // NSString *str=[NSString stringWithFormat:@"%@Auth/Login",app.mainurl]; NSString *str=YOUR URL; [request setURL:[NSURL URLWithString:str]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postdata]; NSError *error; NSURLResponse *response; NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSString *returnstring=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; NSMutableDictionary *dict=[returnstring JSONValue]; NSLog(@"%@",dict); } -(void)GETMethod { NSString *appurl; NSString *temp =@"YOUR URL"; appurl = [NSString stringWithFormat:@"%@uid=%@&cid=%ld",temp,user_id,(long)clubeid]; appurl = [appurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:appurl]]; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; NSMutableDictionary *dict_eventalldata=[returnString JSONValue]; NSString *success=[dict_eventalldata objectForKey:@"success"]; } 

Obtener solicitud:

 -(void)fetchData{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"yourURL"]]; NSLog(@"LatestURL:%@",data); NSError* error=nil; NSDictionary *jsonDict= [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSLog(@"JSON = %@", [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]); dispatch_async(dispatch_get_main_queue(), ^{ NSDictionary *statuses=[jsonDict objectForKey:@"result"]; NSLog(@"SomeStatus :%@",statuses); if (!statuses) { NSLog(@"Error in Json :%@",error); } else { [self.arrayTimeline removeAllObjects]; for(NSDictionary *newValu in statuses) { [self.arrayTimeline addObject:newValu]; NSString *ProjectName=[newValu objectForKey:@"project_name"]; NSLog(@"Project Name : %@",ProjectName); NSString *Stage=[newValu objectForKey:@"stage_name"]; NSLog(@"Stage : %@",Stage); NSString *CompTime=[newValu objectForKey:@"completion_time"]; NSLog(@"Completion Time : %@",CompTime); NSString *Status=[newValu objectForKey:@"status"]; NSLog(@"Status : %@",Status); } [self.projectTimelineTable reloadData]; }); } }); } 

Respuesta de JSON: {“estado”: “éxito”, “nombre”: “proyecto1”, “dirección”: “estación de metro de badkal mor”, “estado”: “haryana”, “ciudad”: “faridabad”, “hora de inicio” : “1480586013”, “current_stage”: “Tender Acceptance”, “manager”: “No disponible”, “completion_time”: “1480464000”}

puedes obtener el valor de las claves como name, start_time, etc. y mostrar en la etiqueta

ver control.h

 @interface ViewController UIViewController @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic)NSArray *array; @property NSInteger select; @end 

view.m

  - (void)viewDidLoad { [super viewDidLoad]; NSString *urlString = [NSString stringWithFormat: @"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=11.021459,76.916332&radius=2000&types=atm&sensor=false&key=AIzaS yD7c1IID7zDCdcfpC69fC7CUqLjz50mcls"]; NSURL *url = [NSURL URLWithString: urlString]; NSData *data = [NSData dataWithContentsOfURL:url]; NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil]; _array = [[NSMutableArray alloc]init]; _array = [[jsonData objectForKey:@"results"] mutableCopy]; [_tableView reloadData];} // Do any additional setup after loading the view, typically from a - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _array.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellid = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid]; cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellid]; cell.textLabel.text = [[_array valueForKeyPath:@"name"]objectAtIndex:indexPath.row]; cell.detailTextLabel.text = [[_array valueForKeyPath:@"vicinity"]objectAtIndex:indexPath.row]; NSURL *imgUrl = [NSURL URLWithString:[[_array valueForKey:@"icon"]objectAtIndex:indexPath.row]]; NSData *imgData = [NSData dataWithContentsOfURL:imgUrl]; cell.imageView.layer.cornerRadius = cell.imageView.frame.size.width/2; cell.imageView.layer.masksToBounds = YES; cell.imageView.image = [UIImage imageWithData:imgData]; return cell; } @end 

tablecell.h

  @interface TableViewCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIImageView *imgView; @property (weak, nonatomic) IBOutlet UILabel *lblName; @property (weak, nonatomic) IBOutlet UILabel *lblAddress;