процесс аутентификации iPhone - PullRequest
0 голосов
/ 08 марта 2012

У меня проблемы с поиском информации по этой теме. Пожалуйста, помогите мне здесь.

Мне нужно передать аргументы через метод POST или GET на мой веб-сервер и получить ответ.

В основном, если использовать метод GET, я хочу сделать что-то вроде server.com /? User = john & password = smith и получить динамически сгенерированный HTML-код, который делается с моим php скрипт. Все это без использования веб-браузера в моем приложении.

Как это обычно делается?

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Вы захотите посмотреть на NSMutableURLRequest и NSURLConnection.

Например, вы можете использовать их следующим образом для запроса GET на ваш сервер:

- (void)loginUser:(NSString *)username withPassword:(NSString *)password {

    // GET
    NSString *serverURL = [NSString stringWithFormat:@"http://yourserver.com/login.php?user=%@&pass=%@", username, password];

    NSURL *url = [NSURL URLWithString:serverURL];
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

    NSURLConnection *connection = [NSURLConnection connectionWithRequest:req delegate:self];

    if (connection) {
        connectionData = [[NSMutableData alloc] init];
    }
}

Это отправит асинхронный запрос GET на ваш сервер со строкой запроса, содержащей имя пользователя и пароль.

Если вы хотите отправить имя пользователя и пароль с помощью запроса POST, метод будет выглядеть примерно так:

- (void)loginUser:(NSString *)username withPassword:(NSString *)password {

        // POST
        NSString *myRequestString = [NSString stringWithFormat:@"user=%@&pass=%@",username,password];
        NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];

        NSURL *url = [NSURL URLWithString:@"http://yourserver.com/login.php"];
        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
        [req setHTTPMethod: @"POST"];
        [req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
        [req setHTTPBody: myRequestData];

        NSURLConnection *connection = [NSURLConnection connectionWithRequest:req delegate:self];

        if (connection) {
            connectionData = [[NSMutableData alloc] init];
        }
    }

Чтобы получить ответ от сервера, вам необходимо реализовать методы делегата NSURLConnection, например:

#pragma mark -
#pragma mark NSURLConnection delegate methods
#pragma mark -

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

    // Called if you have an .htaccess auth. on server
    NSURLCredential *newCredential;
    newCredential = [NSURLCredential credentialWithUser:@"your_username" password:@"your_password" persistence:NSURLCredentialPersistenceForSession];
    [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
}

-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    [connectionData setLength: 0];
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [connectionData appendData:data];
}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

    [connectionData release];
}

-(void) connectionDidFinishLoading:(NSURLConnection *)connection {  


    NSString *content = [[NSString alloc]  initWithBytes:[connectionData bytes]
                                                  length:[connectionData length] encoding: NSUTF8StringEncoding];

    // This will be your server's HTML response
    NSLog(@"response: %@",content);

    [content release];
    [connectionData release];
}

Ссылки:

Ссылка на класс NSMutableURLRequest

NSURLC Ссылка на класс соединения

Надеюсь, это поможет:)

0 голосов
/ 08 марта 2012

Обычно это делается с помощью NSURLConnection . Вы также можете использовать метод NSString stringWithContentsOfURL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...