代码之家  ›  专栏  ›  技术社区  ›  gabaum10

nsmutableurl请求正确发布

  •  1
  • gabaum10  · 技术社区  · 14 年前

    所以我尝试使用一个nsmutableurlRequest登录我的站点,它通过一个post提供凭证。作为一个noobie,我对这个方法的功能有一些问题,以确保我理解它。

    NSString *post = [NSString stringWithFormat:@"username=%@&password=%@&TARGET=%@",LoginId,LoginPwd,target];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
    
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setHTTPShouldHandleCookies:YES];
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://somelogin.mycomp.verify.fcc"]]];
    //[request setURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
    [request setHTTPBody:postData];
    
    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    

    现在,这将通过委托方法自动处理任何重定向,对吗?它还会收集沿途的饼干吗?另外,我应该使用异步请求吗?谢谢!

    更新: 所以我推断一些cookie被请求和随后的重定向忽略了。有人知道为什么会这样吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Cœur N0mi    7 年前

    您可以在同步登录时执行类似的操作…代码并不完美,但这是一般的想法。

    在这里查找文档

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

    // credentials set here
    NSURLCredential *creds = [NSURLCredential credentialWithUser:LoginId password:LoginPwd
                                               persistence:NSURLCredentialPersistenceForSession];
    
    NSURLProtectionSpace *protectionedSpace = [[NSURLProtectionSpace alloc]
      initWithHost:@"mycomp.verify.fcc"
      port:8443
      protocol:@"https"
      realm:nil
      authenticationMethod:nil];
    
    
    [[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:creds
                                                forProtectionSpace:protectionedSpace];
    
    // removed credentials from line...
    NSString *post = [NSString stringWithFormat:@"TARGET=%@",target];
    

    下面是一个异步操作的教程

    http://iosdevelopertips.com/networking/handling-url-authentication-challenges-accessing-password-protected-servers.html