1

我正在尝试使用以下代码进行身份验证

NSString *urlAsString =[NSString stringWithFormat:@"http://www.myurl.com/abc/authenticate.php"];

    NSURL *url = [NSURL URLWithString:urlAsString];

    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 

    [urlRequest setTimeoutInterval:30.0f];

    [urlRequest setHTTPMethod:@"POST"];

    [urlRequest addValue:@"test" forHTTPHeaderField:@"m_username" ];

    [urlRequest addValue:@"123" forHTTPHeaderField:@"m_password" ];

    [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response,NSData *data, NSError *error) {

        if ([data length] >0 && error == nil){

            html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

            NSLog(@"HTML = %@", html);

            receivedData = [NSMutableData data];

        }
        else if ([data length] == 0 && error == nil){

            NSLog(@"Nothing was downloaded."); 

        }

        else if (error != nil){

            NSLog(@"Error happened = %@", error);
        } 
    }];

    // Start loading data
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
    if (theConnection) 
    {
        // Create the NSMutableData to hold the received data
        receivedData = [NSMutableData data];

    } 
    else {
        // Inform the user the connection failed.

    }

我的用户名密码是正确的,我认为我没有进行正确的调用,这就是为什么我没有得到想要的结果并且 Web 服务正在接收空参数。

可能是什么问题?

任何帮助表示赞赏。

4

2 回答 2

1

调试的第一步是尝试在浏览器中查看所需的响应或使用类似 fiddler 的东西。查看您正在使用的 url 是什么,并查看实际的 POST 值是什么。提交的用户名/密码在哪里?通常身份验证使用服务器端身份验证,但有时它在 url 本身中。它在您的浏览器中是如何工作的?

根据描述和您的代码,我有点认为您可能包含的字段

 [urlRequest addValue:@"test" forHTTPHeaderField:@"m_username" ];
 [urlRequest addValue:@"123" forHTTPHeaderField:@"m_password" ];

也许应该添加到您发布到的网址中?也许是这样的:

NSString *urlAsString =[NSString stringWithFormat:@"http://www.myurl.com/abc/authenticate.php?username/password"];
于 2012-06-27T21:12:22.817 回答
0

如果您期待身份验证挑战,您应该使用connection:didReceiveAuthenticationChallenge:NSURLConnection 方法

通过添加该方法并包含一个断点,您至少可以看到您的挑战是否正在发生,并且实际上是否得到了正确处理。下面是我如何为项目使用身份验证质询方法的示例

 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
 {
     NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" password:@"passwordvalue" persistence:NSURLCredentialPersistenceForSession];
     [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
 }

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html#//apple_ref/doc/uid/TP40009507-SW1

于 2012-06-27T19:15:13.637 回答