Как я могу проверить, что мои данные прикреплены с методом RequestBody в Post в Objective C - PullRequest
0 голосов
/ 14 декабря 2011

Я делаю страницу входа для приложения. Учетные данные хранятся в БД. поэтому я делаю службу промежуточного ПО ASP.Net.

Теперь ранее я делал метод GET для отправки запроса, который добавляет детали в URL STRING (что мне сейчас не нужно). Я хочу сделать метод POST. поэтому я нашел одну очень хорошую ссылку для этого, но я не уверен, правильно ли я это сделал или нет ИЛИ мой коллега по ASP.net сделал какую-то ошибку как есть 1007 * не работает .

Если учетные данные, т. Е. Имя пользователя и пароль верны, служба возвращает мне XML-код, подобный этому

<result>
    success
</result>

или ошибка , если нет.

Так может любой, пожалуйста, скажите мне, является ли этот код правильным или нет, и если нет, то в чем заключается ошибка .... Спасибо за ваше время.

Код: -

@class FirstViewController;
@interface TestLoginViewController : UIViewController<UITextFieldDelegate,NSXMLParserDelegate>{

    IBOutlet UITextField *txtUserName,*txtPassword;
    IBOutlet UIButton *submitDetails;

    FirstViewController *viewController;
    NSString *currentElement,*status;
    NSString *loginName,*password;
}

@property (nonatomic,retain) IBOutlet UITextField *txtUserName;
@property (nonatomic,retain) IBOutlet UITextField *txtPassword;

@property (retain) NSString *loginName;
@property (retain) NSString *password;
@property (retain) NSString *status;

-(IBAction)onTapSubmit:(id)sender;
-(IBAction)onTapReset;

@end


-(IBAction)onTapSubmit:(id)sender{
    NSLog(@"UserName :- %@",txtUserName.text);
    NSLog(@"Password :- %@",txtPassword.text);
    if(![txtUserName.text isEqualToString:@""] && ![txtPassword.text isEqualToString:@""]){

  //      NSString *uName = txtUserName.text;
   //     NSString *uPass = txtPassword.text;

    //    NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",[self urlEncodeValue:uName],[self urlEncodeValue:uPass]];


        NSString *temp1 = [@"username=" stringByAppendingString:txtUserName.text];
        NSString *temp2 = [temp1 stringByAppendingString:@"&password="];
       NSString *post = [temp2 stringByAppendingString:txtPassword.text];

        NSLog(@"Post String ==== %@",post);

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:@"http://iphonewebserver.wsisites.net/Default.aspx"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];
        NSXMLParser *parser= [[NSXMLParser alloc]initWithData:postData];

**EDITED :-**


NSURLResponse *response;
        NSError *error;
        NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"Succeeded! Received %d bytes of data",[urlData length]);
        NSString *outputdata = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];
        NSLog(@"%@", outputdata);

**//Nslog output

 Succeeded! Received 39 bytes of data
2011-12-14 21:28:21.461 TestLogin[1094:207] <result><login>success</login></result>
2011-12-14 21:28:21.463 TestLogin[1094:207] Status======= (null)**

   /*     
        NSMutableString *strURL=[[NSMutableString alloc] init];
        [strURL appendFormat:@"http://iphonewebserver.wsisites.net/Default.aspx?username="];
        [strURL appendFormat:@"%@",txtUserName.text];
        [strURL appendFormat:@"&password="];
        [strURL appendFormat:@"%@",txtPassword.text];

        NSLog(@"urlformed:-%@",strURL);

        NSURL *url= [NSURL URLWithString:strURL];

        NSData *data= [NSData dataWithContentsOfURL:url];
        [strURL release];

        NSXMLParser *parser= [[NSXMLParser alloc]initWithData:data];
    */

        parser.delegate=self;
        [parser parse];
        [parser release];

 //       if([self.status isEqualToString:@"success"]){
        if(self.status){
            viewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
            [self presentModalViewController:viewController animated:YES]; 
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter Correct Username and Password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            NSLog(@"%@",self.status);
        }
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter the Username and Password" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [alert show];
        [alert release];

    }

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0)
    { 
        [self onTapReset];
    }

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    txtUserName.delegate = self;
    txtPassword.delegate = self;
    txtUserName.text = @"admin";
    txtPassword.text = @"pass";
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    currentElement = elementName;
    if([elementName isEqualToString:@"result"]) {
        NSLog(@"%@",currentElement);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if([currentElement isEqualToString:@"login"]){
        self.status=[NSString stringWithFormat:@"%@",string];
        NSLog(@"%@",self.status);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    currentElement=@"";//required to reset current element

}

@end

Если что-то пропущено, пожалуйста, сообщите мне. :))

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Вы создали запрос, но никуда его не отправляете.
Создание объекта NSURLConnection с использованием вашего запроса - он отправит его на сервер и сообщит результаты его делегату.

0 голосов
/ 15 декабря 2011

Наконец-то я получил свой код, работает, как обычно, я делал очень простую ошибку .... Я не давал парсеру правильные данные для разбора .... это код, все работает нормально и хорошо.

КОД: -

@class FirstViewController;
@interface TestLoginViewController : UIViewController<UITextFieldDelegate,NSXMLParserDelegate>{

    IBOutlet UITextField *txtUserName,*txtPassword;
    IBOutlet UIButton *submitDetails;

    FirstViewController *viewController;
    NSString *currentElement,*status;
    NSString *loginName,*password;
}

@property (nonatomic,retain) IBOutlet UITextField *txtUserName;
@property (nonatomic,retain) IBOutlet UITextField *txtPassword;

@property (retain) NSString *loginName;
@property (retain) NSString *password;
@property (retain) NSString *status;

-(IBAction)onTapSubmit:(id)sender;
-(IBAction)onTapReset;

@end


-(IBAction)onTapSubmit:(id)sender{
    NSLog(@"UserName :- %@",txtUserName.text);
    NSLog(@"Password :- %@",txtPassword.text);
    if(![txtUserName.text isEqualToString:@""] && ![txtPassword.text isEqualToString:@""]){

        NSString *temp1 = [@"username=" stringByAppendingString:txtUserName.text];
        NSString *temp2 = [temp1 stringByAppendingString:@"&password="];
       NSString *post = [temp2 stringByAppendingString:txtPassword.text];

        NSLog(@"Post String ==== %@",post);

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:@"http://iphonewebserver.wsisites.net/Default.aspx"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];

NSURLResponse *response;
        NSError *error;
        NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"Succeeded! Received %d bytes of data",[urlData length]);
        NSString *outputdata = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];
        NSLog(@"%@", outputdata);
NSXMLParser *parser= [[NSXMLParser alloc]initWithData:urlData];

        parser.delegate=self;
        [parser parse];
        [parser release];

      if([self.status isEqualToString:@"success"]){
            viewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
            [self presentModalViewController:viewController animated:YES]; 
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter Correct Username and Password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            NSLog(@"%@",self.status);
        }
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter the Username and Password" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [alert show];
        [alert release];

    }

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0)
    { 
        [self onTapReset];
    }

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    txtUserName.delegate = self;
    txtPassword.delegate = self;
    txtUserName.text = @"admin";
    txtPassword.text = @"pass";
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    currentElement = elementName;
    if([elementName isEqualToString:@"result"]) {
        NSLog(@"%@",currentElement);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if([currentElement isEqualToString:@"login"]){
        self.status=[NSString stringWithFormat:@"%@",string];
        NSLog(@"%@",self.status);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    currentElement=@"";//required to reset current element

}

@end

Так что наслаждайтесь кодом и получайте удовольствие ....:))

...