2016-04-26 185 views
1

当设置NSMutableURLRequest的“授权”头,头的我的服务器的响应不包括头:NSMutableURLRequest设置授权头

[Host] => myhost.com 
[Content-Type] => application/x-www-form-urlencoded 
[Connection] => keep-alive 
[Accept] => */* 
[User-Agent] => MyApp/1 CFNetwork/758.3.15 Darwin/15.4.0 
[Content-Length] => 327 
[Accept-Language] => en-gb 
[Accept-Encoding] => gzip, deflate 

我阅读文档,建议不要在这里设定这个,所以我在那里应该在客户端设置授权头?

Authorization头的目的是要沿着我的Oauth签名和其他的Oauth相关信息发送

回答

2

你用户名和密码API

// Create the request 
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0]; 

// New Create the connection 
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 

NSURLSession *session = [NSURLSession sharedSession];//sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 

NSURLCredential *creds = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceForSession]; 

NSString *authStr = [NSString stringWithFormat:@"%@:%@",self.username,self.password];// @"username:password"; 

NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]]; 

// Part Important 
[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

// Or Token 
NSString *authValueToken = @"OAuth UElJRFER1A5zcGkyW16T0"; 
[request setValue:authValueToken forHTTPHeaderField:@"AuthenticatedToken"];// Authenticated API 


NSString *postLength = [NSString stringWithFormat:@"327"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

NSString *postLength = [NSString stringWithFormat:@"application/x-www-form-urlencoded"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Type"]; 

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request  
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
      receivedData = [NSMutableData data]; 
      NSString* responseData = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]; 
      NSLog(@"%@",responseData); 
      if (error) { 
        [self handleError: error]; 
      } 
}]; 

[dataTask resume]; // <- important 

NSLog(@"Header Fields Request--->> %@",request.allHTTPHeaderFields); 
+0

我需要发送授权标头以将Oauth数据发送到我的服务器 –

+0

@AdamCarter请更新您的问题,以包括这是针对OAuth的。 – quellish

2

文档建议不要设置它,因为它通常是错误的方式来做到这一点。对于大多数身份验证,您应该在身份验证完成处理程序中创建实际的NSURLCredential对象,并且只有在初次尝试访问资源失败后,您才应该这样做。

不幸的是,AFAIK在操作系统中不支持OAuth,因此您唯一可以做的就是指定头文件,并确保您永远不会为该主机名添加任何其他凭据(因为那样如果你这样做的话,你的Authorization头文件将会被压制)。