如何使用UITextField输入中的setHTTPBody

时间:2015-07-22 15:02:07

标签: ios xcode ios7 ios8 ios6

我正在使用mycontacts restful API来集成到我的应用程序中。现在,我想使用UITextField输入的用户名和密码不是手动的。我不知道,如何在setHTTPBody中做到这一点。有什么建议吗?

NSURL *URL = [NSURL URLWithString:@"https://api.addressbook.io/v1/login"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setHTTPMethod:@"POST"];

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

//Here I want to use username and password obtained by UITextField.
[request setHTTPBody:[@"{\n  \"username\": \"Enter username\",\n  \"password\": \"EnterPassword\",\n  \"client\": \"apiary\"\n}" dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                        completionHandler:
                              ^(NSData *data, NSURLResponse *response, NSError *error) {

                                  if (error) {
                                      // Handle error...
                                      return;
                                  }

                                  if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
                                      NSLog(@"Response HTTP Status code: %ld\n", (long)[(NSHTTPURLResponse *)response statusCode]);
                                      NSLog(@"Response HTTP Headers:\n%@\n", [(NSHTTPURLResponse *)response allHeaderFields]);
                                  }

                                  NSString* body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                  NSLog(@"Response Body:\n%@\n", body);
                              }];
[task resume];

2 个答案:

答案 0 :(得分:0)

我想您不希望单击按钮来调用哪个Web服务。您可以做的是为UItextField设置委托并使用此委托方法

- (void)textFieldDidEndEditing:(UITextField *)textField;

此委托方法的作用是每次移出文本字段时都会调用此方法。在这里,您可以检查用户是否已输入文本字段并设置您的http正文。

答案 1 :(得分:0)

使用NSString并使用文本字段中的用户名和密码对其进行格式化,并将该主体发送到setHTTPbody。

NSURL *URL = [NSURL URLWithString:@"https://api.addressbook.io/v1/login"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setHTTPMethod:@"POST"];

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

//Improved code lines
NSString *username = ((UITextField*)[self.view viewWithTag:1]).text;
NSString *password = ((UITextField*)[self.view viewWithTag:2]).text;

NSString *body = [NSString stringWithFormat:@"{\n  \"username\": \"%@\",\n  \"password\": \"%@\",\n  \"client\": \"apiary\"\n}",username,password];

[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
 //Improved code lines end

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                        completionHandler:
                              ^(NSData *data, NSURLResponse *response, NSError *error) {

                                  if (error) {

                                      [self alert:@"Error" message:@"Check network connection"];

                                      return;
                                  }

                                  if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
                                      NSLog(@"Response HTTP Status code: %ld\n", (long)[(NSHTTPURLResponse *)response statusCode]);

                                      }
                                      NSLog(@"Response HTTP Headers:\n%@\n", [(NSHTTPURLResponse *)response allHeaderFields]);
                                  }

                                  NSString* body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                  NSLog(@"Response Body:\n%@\n", body);
                              }];
[self.view endEditing:YES];
[task resume];