How to send POST and GET request? How to send POST and GET request? objective-c objective-c

How to send POST and GET request?


Sending POST and GET requests in iOS is quite easy; and there's no need for an additional framework.


POST Request:

We begin by creating our POST's body (ergo. what we'd like to send) as an NSString, and converting it to NSData.

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

Next up, we read the postData's length, so we can pass it along in the request.

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

Now that we have what we'd like to post, we can create an NSMutableURLRequest, and include our 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];

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;

And finally, we can send our request, and read the reply by creating a new NSURLSession:

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];

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()

GET Request:

With the GET request it's basically the same thing, only without the HTTPBody and Content-Length.

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];

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()

On a side note, you can add Content-Type (and other data) by adding the following to our NSMutableURLRequest. This might be required by the server when requesting, e.g, a .

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

Response code can also be read using [(NSHTTPURLResponse*)response statusCode].

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

Update: sendSynchronousRequest is deprecated from and (10.11) and out.

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);


By using RestKit you can make a simple POST request (see this GitHub page for more details).

Import RestKit in your header file.

#import <RestKit/RestKit.h>

Then you can start by creating a new RKRequest.

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

Then specify what kind of request you want to make (in this case, a POST request).

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

And then set your request as a JSON in additionalHTTPHeaders.

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

Finally, you can send the request.

[MyRequest send];

Additionally you can NSLog your request to see the outcome.

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

Sources: RestKit.org and 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"];}