Objective c 在目标C中使用GET或POST
我基本上是在创建一个需要验证用户ID和密码的应用程序。我知道我需要使用POST而不是GET。但我只是在胡闹,想弄明白些什么 当我在URL中发送两个变量时,就会出现问题。我的代码是:Objective c 在目标C中使用GET或POST,objective-c,post,get,Objective C,Post,Get,我基本上是在创建一个需要验证用户ID和密码的应用程序。我知道我需要使用POST而不是GET。但我只是在胡闹,想弄明白些什么 当我在URL中发送两个变量时,就会出现问题。我的代码是: NSURL *url = [NSURL URLWithString:@"https://myurl.com?something=whatever&id=%@&pass=%@",Email.text,Password.text]; 电子邮件和密码是我的两个文本字段 我得到一个错误,上面写着: 方法中调
NSURL *url = [NSURL URLWithString:@"https://myurl.com?something=whatever&id=%@&pass=%@",Email.text,Password.text];
电子邮件和密码是我的两个文本字段
我得到一个错误,上面写着:
方法中调用的参数太多,应为1,但有3个
我做错了什么?我能做什么
请注意,我正在使用GET
同样的错误也发生在POST上 试试这个:
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://myurl.com?something=whatever&id=%@&pass=%@",Email.text,Password.text]];
这是在GET请求中执行查询参数的一种快速而肮脏的方法。您说过这只是为了测试吗
NSString *urlStr = [NSString stringWithFormat:@"https://myurl.com?something=whatever&id=%@&pass=%@",
[Email.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
[Password.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURL *url = [NSURL URLWithString:urlStr];
NSString *responseStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];
NSLog(@"%@", responseStr);
以下是如何正确使用POST:
NSString *url = [NSURL URLWithString:@"https://myurl.com"];
NSString *postStr = [NSString stringWithFormat:"something=whatever&id=%@&pass=%@",
[Email.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
[Password.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[postStr dataUsingEncoding:NSUTF8StringEncoding]];
NSHTTPURLResponse *urlResponse = nil;
NSError *error = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString *responseStr = responseData ? [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] : nil;
if (urlResponse.statusCode != 200 || !syncData || !responseStr) {
// something went wrong...
NSLog(@"Error processing HTTP %i response: %@", urlResponse.statusCode, error);
return;
}
// it worked
NSlog(@"%@", rseponseStr);
注意:这两个都将锁定当前线程。您应该使用dispatch_async从主线程跳转到后台线程使用此函数进行参数编码
NSData *encodeDictionary(NSDictionary *dictionary)
{
NSMutableArray *parts = [[NSMutableArray alloc] init];
for (NSString *key in dictionary) {
NSString *encodedValue = [[dictionary objectForKey:key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *encodedKey = [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue];
[parts addObject:part];
}
NSString *encodedDictionary = [parts componentsJoinedByString:@"&"];
return [encodedDictionary dataUsingEncoding:NSUTF8StringEncoding];
}
这里基本上是发出请求的代码
NSURL *url = [NSURL URLWithString:@"http://localhost/"];
NSDictionary *postDict = @{@"username" : emailField.text, @"password" : passwordField.text};
NSData *postData = encodeDictionary(postDict);
// Create the request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%zd", postData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
// Sending the request
[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
// Decode response and take an action
}];