2015-11-01 19 views
0

我有一個URL來獲取數據並顯示。在這裏,我需要遵循authAuthorization頭的一些步驟:爲Base64,SHA256 SHA512 0R如何使用「GET」獲取數據並進行顯示 - 使用Rest API的授權標頭

所以我在這裏編碼得到使用授權header.But數據在我的控制檯我得到了錯誤:

str: { 
    "error_code": "invalid_auth_header", 
    "message": "Invalid authorization. Use an auth header or access hash" 
} 

我是新到HTTP/GET,授權頭和所有。我做錯了什麼,我需要在那裏改變以解決問題?

這裏是我的代碼(這是基於以下答案更新代碼):

#import "ViewController.h" 
#import <CommonCrypto/CommonDigest.h> 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     NSString *userName = @"[email protected]"; 
     NSString *password = @"testingyouonit2"; 

     NSData *plainData = [password dataUsingEncoding:NSUTF8StringEncoding]; 
     NSString *base64String = [plainData base64EncodedStringWithOptions:0]; 
     base64String=[self sha256HashFor: base64String]; 

     //setting the string of the url taking from appliance IP. 
     NSString *urlString = @"https://api.exampleURL.com/files"; 

     NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init]; 
     [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"GET"]; 

     NSString *authStr = [NSString stringWithFormat:@"%@:%@", userName, base64String]; 
     NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 
     NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]]; 
     [request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

     NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

     NSString *str = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

     NSLog(@"str: %@", str); 
} 
-(NSString*)sha256HashFor:(NSString*)input { 
    const char* str = [input UTF8String]; 
    unsigned char result[CC_SHA256_DIGEST_LENGTH]; 
    CC_SHA256(str, strlen(str), result); 

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; 
    for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++) { 
      [ret appendFormat:@"%02x",result[i]]; 
    } 
    return ret; 
} 
+0

@jace我的問題是你的文章 – AAAbi

+0

相關,我認爲這個問題是你把一個在標題值中輸入URL,試着輸入你生成的密碼,所以標題代碼應該如下所示:'[addValue:[NSString stringWithFormat:@「Basic%@」,base64String] forHTTPHeaderField:@「Authorization」];' – Scar

+0

yes我有變化,但仍然得到了我上面提到的錯誤 – AAAbi

回答

0

首先,請修復代碼中的以下錯誤:

  1. 更改base64String=[self sha256HashFor: password];base64String=[self sha256HashFor: base64String];
  2. NSString *str1 = [NSString stringWithFormat:@"https://api.exampleurl/user/data",userName,base64String];NSString *str1 = [NSString stringWithFormat:@"https://api.exampleurl/user/data"];

之後,使用基本授權使用下面的代碼:

NSString *authStr = [NSString stringWithFormat:@"%@:%@", userName, base64String]; 
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]]; 
[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 
+0

最後四行代碼替換什麼.ie我是新來的this.where我必須添加該行 – AAAbi

+0

他們應該替換下面的代碼HTTP請求addValue:[NSString stringWithFormat:@「Basic%@」,str1] forHTTPHeaderField: @「授權」];' – Scar

+0

令人敬畏的傢伙,呃,非常感謝。仔細檢查我的更新後的帖子是否正確的代碼 – AAAbi

相關問題