Ios NSMutableURLRequest设置授权标头

Ios NSMutableURLRequest设置授权标头,ios,nsurlsession,nsurlrequest,Ios,Nsurlsession,Nsurlrequest,设置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-Leng

设置
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
我阅读了文档,建议不要在这里设置,那么我应该在客户端的何处设置授权标题


我的
授权
标题的目的是发送我的Oauth签名和其他Oauth相关信息

您有用户和密码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);
//创建请求
NSMutableURLRequest*request=[NSMutableUrlRequestWithURL:url缓存策略:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0];
//新建并创建连接
NSURLSessionConfiguration*defaultConfigObject=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession*会话=[NSURLSession sharedSession]//sessionWithConfiguration:defaultConfigObject委托:自委托队列:[NSOperationQueue mainQueue]];
NSURLCredential*creds=[nsurlCredentialCredentialWithUser:self.username密码:self.password持久性:NSURLCredentialPersistenceForSession];
NSString*authStr=[NSString stringWithFormat:@“%@:%@”,self.username,self.password];//@“用户名:密码”;
NSData*authData=[authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString*authValue=[NSString stringWithFormat:@“Basic%@,[authData base64EncodedStringWithOptions:0]];
//重要部分
[请求设置值:HttpHeaderField的authValue:@“授权”];
//或代币
NSString*authValueToken=@“OAuth UElJRFER1A5zcGkyW16T0”;
[请求设置值:HttpHeaderField的authValueToken:@“AuthenticatedToken”];//认证API
NSString*postLength=[NSString stringWithFormat:@“327”];
[请求设置值:HttpHeaderField的postLength:@“内容长度”];
NSString*postLength=[NSString stringWithFormat:@“application/x-www-form-urlencoded”];
[请求设置值:HttpHeaderField的postLength:@“内容类型”];
NSURLSessionDataTask*dataTask=[会话dataTaskWithRequest:request
completionHandler:^(NSData*数据,NSURLResponse*响应,NSError*错误){
接收数据=[NSMutableData];
NSString*responseData=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSLog(@“%@”,响应数据);
如果(错误){
[自处理错误:错误];
}
}];

[数据任务恢复];// 您有用户和密码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);
//创建请求
NSMutableURLRequest*request=[NSMutableUrlRequestWithURL:url缓存策略:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0];
//新建并创建连接
NSURLSessionConfiguration*defaultConfigObject=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession*会话=[NSURLSession sharedSession]//sessionWithConfiguration:defaultConfigObject委托:自委托队列:[NSOperationQueue mainQueue]];
NSURLCredential*creds=[nsurlCredentialCredentialWithUser:self.username密码:self.password持久性:NSURLCredentialPersistenceForSession];
NSString*authStr=[NSString stringWithFormat:@“%@:%@”,self.username,self.password];//@“用户名:密码”;
NSData*authData=[authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString*authValue=[NSString stringWithFormat:@“Basic%@,[authData base64EncodedStringWithOptions:0]];
//重要部分
[请求设置值:HttpHeaderField的authValue:@“授权”];
//或代币
NSString*authValueToken=@“OAuth UElJRFER1A5zcGkyW16T0”;
[请求设置值:HttpHeaderField的authValueToken:@“AuthenticatedToken”];//认证API
NSString*postLength=[NSString stringWithFormat:@“327”];
[请求设置值:HttpHeaderField的postLength:@“内容长度”];
NSString*postLength=[NSString stringWithFormat:@“application/x-www-form-urlencoded”];
[请求设置值:HttpHeaderField的postLength:@“内容类型”];
NSURLSessionDataTask*dataTask=[会话dataTaskWithRequest:request
completionHandler:^(NSData*数据,NSURLResponse*响应,NSError*错误){
接收数据=[NSMutableData];
NSString*responseData=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSLog(@“%@”,响应数据);
如果(错误){
[自处理错误:错误];
}
}];

[数据任务恢复];// 文档建议不要设置它,因为这样做通常是错误的。对于大多数身份验证,您应该在身份验证完成处理程序中创建一个实际的NSURLCredential对象,并且应该仅在首次尝试访问资源失败后才这样做


不幸的是,恕我直言,操作系统中不支持OAuth,因此您唯一能做的就是指定要开始的头,并确保您从未意外地为该主机名添加任何其他凭据(因为如果这样做,您的授权头很可能会被踩到).

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


不幸的是,恕我直言,操作系统中不支持OAuth,因此您唯一能做的就是指定要开始的头,并确保您从未意外地为该主机名添加任何其他凭据(因为如果这样做,您的授权头很可能会被踩到).

我需要发送授权标头以将Oauth数据发送到我的server@AdamCarter请更新您的问题,包括这是特定于OAuth的。我需要发送授权标头以将OAuth数据发送到我的server@AdamCarter请更新您的问题,包括这是特定于OAuth的。