代码之家  ›  专栏  ›  技术社区  ›  Marcus S. Zarra

服务器不提供质询时的NSURL身份验证

  •  6
  • Marcus S. Zarra  · 技术社区  · 16 年前

    我所处的情况是,我需要向服务器发送身份验证(基本HTTP身份验证),但服务器不会首先向我发送质询。这是wget开关的一个副本——auth no challenge。我的问题是,我不认为有任何方法可以让NSURL做到这一点。

    -connection: didReceiveAuthenticationChallenge: 方法未被调用。

    3 回复  |  直到 16 年前
        1
  •  8
  •   paulthenerd    16 年前

    您可以将授权信息手动添加到请求,方法是将其添加到请求标头,如下所示:

    NSString *authString = [[[NSString stringWithFormat:@"%@:%@",user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];        
    [request setValue:[NSString stringWithFormat:@"Basic %@", authString] forHTTPHeaderField:@"Authorization"]; 
    

    我在iphone上的API中使用了这种方法,而额外的挑战不是由服务器发起的。

        2
  •  9
  •   epatel    16 年前

    我相信您可以将用户名和密码添加到 NSURL

    例子

    NSURL *url = [NSURL URLWithString:@"http://username:password@some.host.com/"];
    
        3
  •  0
  •   Markus Millfjord    12 年前

    为了它的价值;

    NSString *credentials = [NSString stringWithFormat:@"%@:%@", username, password];
    NSData* credentialsData = [NSData dataWithBytes:[credentials UTF8String] length:strlen([credentials UTF8String])];
    credentials = [credentialsData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    NSString *authStr = [NSString stringWithFormat:@"Basic %@", credentials];
    [urlRequest setValue:authStr forHTTPHeaderField:@"Authorization"];