2013-11-21 1 views
0

Я пытаюсь отправить асинхронный запрос на отправку на php url, но для запроса требуется параметр «Пароль» и значение «EGOT». Я уверен, что мне нужно использовать это:Как отправить запрос асинхронного сообщения с параметром в объективе -c?

(void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler 

Единственная проблема заключается в том, что, когда я начинаю вводить его в моем файле реализации ViewController, он не получает признание. Мне нужно импортировать NSURL для этого? Я думал, что UIVIewcontroller уже наследуется от класса. Если это не правильный метод для получения этого запроса, пожалуйста, объясните мне, как его получить, он будет очень признателен.

+0

параметром вы имеете в виду заголовок запроса? – Macondo2Seattle

+1

Вы можете начать использовать [AFNetworking] (https://github.com/AFNetworking/AFNetworking), который очень прост в использовании класса-оболочки. –

ответ

3

Вы можете создать объект запроса, как это (NSMutableURLRequest является изменяемым подкласс «NSURLRequest»):

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request addValue:@"EGOT" forHTTPHeaderField:@"Password"]; 

И затем вызвать NSURLConnection sendAsynchronousRequest:queue:completionHandler: с этой просьбой.

+0

Мне жаль, что я немного смущен, как реализовать sendAsynchronousRequest. после того, как я сделал то, что вы сказали, я добавил: [NSURLConnection sendAsynchronousRequest: @ "http://ec2-54-243-205-92.compute-1.amazonaws.com/Tests/ping.php" queue: request completeHandler: < #^(NSURLResponse * response, NSData * data, NSError * connectionError) обработчик #> { NSLog (@ «работал»); }]; } – user3015941

+0

Первым параметром 'sendAsynchronousRequest' должен быть' NSMutableURLRequest' (как в моем примере), либо 'NSURLRequest'. Это не строка. См. Документы для метода: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/clm/NSURLConnection/sendAsynchronousRequest : queue: completionHandler: – Macondo2Seattle

0

Вы можете использовать AFNetworking для загрузки и MBProgressHUD для отображения прогресса

AFHTTPClient *httpClient     = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:urlLink]]; 
    NSMutableURLRequest *request; 

request = [httpClient multipartFormRequestWithMethod:@"POST" 
                 path:nil 
                parameters:postDictionary 
            constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { 
            }]; 

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeDeterminate; 
    hud.labelText = @"Uploading"; 

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
     float uploadPercentge   = (float)totalBytesWritten/(float)totalBytesExpectedToWrite; 
     float uploadActualPercentage = uploadPercentge * 100; 
     hud.progress     = uploadPercentge; 
     if (uploadActualPercentage >= 100) { 
      hud.mode  = MBProgressHUDModeText; 
      hud.labelText = [NSString stringWithFormat:@"Waiting for response"]; 
     } 
    }]; 
    [httpClient enqueueHTTPRequestOperation:operation]; 

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     [hud hide:YES]; 
     NSLog(@"Success %@", operation.responseString); 
     NSDictionary *message = [NSJSONSerialization JSONObjectWithData:[operation.responseString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; 
     DLog(@"%@",message); 
    } 
             failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
              NSLog(@"error: %@", operation.responseString); 
              NSLog(@"%@",error); 
             }]; 
    [operation start]; 
+0

Как это отвечает на вопрос OP? – Macondo2Seattle

1

Используйте ниже код для запроса Asynchronous с методом пост ...

NSString *strupload=[NSString stringWithFormat:@"uid=%@&password=%@&oldpassword=%@",appdel.strUserid,txtConfirmPswd.text,txtOldPswd.text]; 
NSString *strurl=[NSString stringWithFormat:@"%@change_password.php?",LocalPath]; 
NSString *strpostlength=[NSString stringWithFormat:@"%d",[strupload length]]; 
NSMutableURLRequest *urlrequest=[[NSMutableURLRequest alloc]init]; 

[urlrequest setURL:[NSURL URLWithString:strurl]]; 
[urlrequest setHTTPMethod:@"POST"]; 
[urlrequest setValue:strpostlength forHTTPHeaderField:@"Content-Length"]; 
[urlrequest setHTTPBody:[strupload dataUsingEncoding:NSUTF8StringEncoding]]; 

[NSURLConnection sendAsynchronousRequest:urlrequest queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    NSError *error1; 
    NSDictionary *res=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error1]; 
}]; 
+0

Это потрясающе! –