如何发送POST和GET请求?

我想发送我的JSON到一个URL( POSTGET )。

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

我目前的请求代码不起作用。

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

使用ASIHTTPRequest 不是一个负责任的答案。

在iOS中发送POSTGET请求非常简单, 而且不需要额外的框架。


POST请求:

我们首先创buildPOSTbody (我们想要发送的)作为NSString ,并将其转换为NSData

Objective-C的

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

接下来,我们读取postDatalength ,所以我们可以在请求中传递它。

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

现在我们有了我们想发布的内容,我们可以创build一个NSMutableURLRequest ,并包含我们的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; 

最后,我们可以发送我们的请求,并通过创build一个新的NSURLSession读取答复:

Objective-C的

 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请求:

使用GET请求基本上是一样的,只有没有 HTTPBodyContent-Length

Objective-C的

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

在附注中,您可以通过将以下内容添加到我们的NSMutableURLRequest来添加Content-Type (和其他数据)。 服务器在请求时可能需要这样做,例如json 。

Objective-C的

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

响应代码也可以使用[(NSHTTPURLResponse*)response statusCode]读取。

迅速

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

更新: sendSynchronousRequest已从ios9和osx- elcapitan (10.11) 弃用

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

通过使用RestKit,您可以创build一个简单的POST请求(请参阅此GitHub页面以获取更多详细信息)。

在头文件中导入RestKit 。

 #import <RestKit/RestKit.h> 

然后你可以开始创build一个新的RKRequest

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

然后指定你想要做什么样的请求(在这种情况下,一个POST请求)。

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

然后在additionalHTTPHeaders的HTTP头中将您的请求设置为JSON。

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

最后,你可以发送请求。

 [MyRequest send]; 

另外你可以NSLog你的请求来查看结果。

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

来源: RestKit.org和我 。

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

– (无效)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]; }); } }); } 

JSON来自url的响应:{“status”:“success”,“name”:“project1”,“address”:“badkal mor metro station”,“state”:“haryana”,“city”:“faridabad” “start_time”:“1480586013”,“current_stage”:“Tender Acceptance”,“manager”:“Not Available”,“completion_time”:“1480464000”}

您可以获得像名称,start_time等键值,并显示在标签上

查看control.h

 @interface ViewController UIViewController<UITableViewDataSource,UITableViewDelegate> @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;