How to send POST and GET request? How to send POST and GET request? swift swift

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