我正在使用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];
答案 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];