1

ユーザーとパスワードのフォームに POST リクエストを使用して、その下にある webapp にアクセスしようとしています。これにより、ユーザーはフィールドに入力したり、ログイン キーを押して webApps にアクセスしたりする必要がなくなります。私の NSLogs によると、接続 DidReceiveResponse、ConnectionDidReceiveData、および ConnectionDidFinishLoading が、シミュレーターに結果が表示されません。WebView に移動すると、空のフォームが表示され、情報を入力するのを待っています... 欲しいものではありません。このフォームをバイパスしたい。ここで何が欠けているか、または露骨に間違っている可能性がありますか? :

ViewDidLoad: ...usr、pW などは *messageBody などの前に生成されます...

NSString *messageBody = [NSString stringWithFormat:@"UsernameFieldName=%@&PasswordFieldName=%@", usr, pW];

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

 NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:appURL];
[theRequest setHTTPMethod:@"Post"];

[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSLog(@"%@", messageBody);

[theRequest setHTTPBody:[messageBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];

[theRequest addValue: messageBody forHTTPHeaderField:@"Content-Length"];
NSLog(@"%@", theRequest);

[NSURLConnection connectionWithRequest: theRequest delegate:self];

接続方法:

- (void)connection:(NSURLConnection*)connection
didReceiveResponse:(NSURLResponse*)response
{
    NSLog(@"Connection DidReceiveResponse");

    webData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
    NSLog(@"ConnectionDidReceiveData");

    webData = [NSMutableData dataWithData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
    NSLog(@"Connection Did Finish Loading");

    [HelpWebView loadData:webData 
                 MIMEType:@"text/html"
         textEncodingName:@"UTF-8"
                  baseURL:nil];
}

以下は、Sangony の寄稿で、もう少し近づきますが、フォームの下にある webapp に到達するために必要なものが他にあります。

 - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
   //KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"key" accessGroup:nil];
   //NSString *usr = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
   //NSString *pW = [keychainItem objectForKey:(__bridge id)(kSecValueData)];

    if ([challenge previousFailureCount] == 0) {
    NSLog(@"received authentication challenge");
    NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"?username"
                                                                password:@"?password"
                                                             persistence:NSURLCredentialPersistenceForSession];
//        NSURLCredential *newCredential = [NSURLCredential credentialWithUser:[NSString stringWithFormat:@"%@", usr]
//                                                                    password:[NSString stringWithFormat:@"%@", pW]
//                                                                persistence:NSURLCredentialPersistenceForSession];
    NSLog(@"Credential created");
    [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
    NSLog(@"Responded to authentication challenge");
}
    else {
    NSLog(@"Authentication failure");
}}

更新 ここで上記の方法をテストしました: http://www.posttestserver.com/

キーと値は、フォームに必要なものです。問題はフォーム/サイト/サーバーにあります。ここからどこへ行くべきかわからない。ここからどこを見始めるかについての提案は素晴らしいでしょう.

4

1 に答える 1

1

このコードを見てください:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] == 0) {
NSLog(@"received authentication challenge");
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:@"?username"
                                                            password:@"?password"
                                                         persistence:NSURLCredentialPersistenceForSession];
NSLog(@"Credential created");
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
NSLog(@"Responded to authentication challenge");    
}
else {
NSLog(@"Authentication failure");
}
于 2013-05-10T22:14:10.640 に答える