Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在目标C中使用GET或POST_Objective C_Post_Get - Fatal编程技术网

Objective c 在目标C中使用GET或POST

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]; 电子邮件和密码是我的两个文本字段 我得到一个错误,上面写着: 方法中调

我基本上是在创建一个需要验证用户ID和密码的应用程序。我知道我需要使用POST而不是GET。但我只是在胡闹,想弄明白些什么

当我在URL中发送两个变量时,就会出现问题。我的代码是:

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