0

webView を使用するアプリがあります。ウェブサイトのホーム画面で、アプリの設定オプションでユーザーが入力したユーザー名とパスワードを使用してログインしたい。現在、このフォーラムで尋ねられた同様の質問に対する解決策で見たこのコードがあります。しかし、それは機能していません(他の人もそうではありませんでした)。

-(IBAction)cachepressed:(id)sender{  

    NSString *baseurl=[[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
    NSString *username= [[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
    NSString *password= [[NSUserDefaults standardUserDefaults] stringForKey:@"pswrd_preference"];    
    NSString* content = [NSString stringWithFormat:@"username=%@&password=%@", username, password];
    NSData *data=[content dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postlength=[NSString stringWithFormat:@"%d",[data length]];
    NSString *loginpage= [baseurl stringByAppendingString:@"/index.php?title=Special:UserLogin"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:loginpage]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postlength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:data]; 
    NSError *error=nil;
    NSURLResponse *response=nil;
    NSData *result=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *HTMLString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
    [webView loadHTMLString:HTMLString baseURL:[NSURL URLWithString:loginpage]];    

}

[request setValue...] で始まる 2 行のコードについてはよくわかりません。誰かがこれに対する解決策を提案できますか? それは大きな助けになるでしょう。ありがとうございます。

4

1 に答える 1

0

これは、Web サイトでの認証方法に大きく依存します。

あなたの質問から私が理解できることに基づいて、投稿したコードは、「username」および「password」という名前のフィールドの値を、POST を使用して index.php?title=Special:UserLogin ページに送信します。

すべてが適切に設定されていることを確認する必要があります。

1. フィールド名は Web サイトで同じですか?

おそらくログインフォームは、ユーザー名とパスワードではなく、異なるフィールド名を使用しています。ソース コードを確認し、入力された名前が実際に「ユーザー名」と「パスワード」であるかどうかを確認します。

2. ホストは、別のソースからのデータの投稿を許可していますか?

以前は、自分のサーバーから発信されたものでなければ POST リクエストが機能しないように設定していたので、iPad からのデータの POST は機能しませんでした。あなたもそうですか?

3. ログイン プロセスは、そのページにデータを投稿することによって実際に行われますか?

Web サイトでは、別の php ページで AJAX を使用して認証が行われ、index.php?title=Special:UserLogin にリダイレクトされる可能性があります。過去にそのようなケースを見たことがあります。

要点は、Web ビュー内でログインを行う前に、Web サイトでログインがどのように行われるかを正確に知る必要があるということです。私が間違っている場合は修正してください。ただし、あなたの投稿に基づくと、ここではそうではないようです

于 2012-06-20T09:44:00.250 に答える