2013-07-30 1 views
1

새 (1.1) Twitter API 용 iPhone 응용 프로그램을 업데이트하려고합니다. 응용 프로그램 전용 인증을 사용하여 응용 프로그램 사용자가 자신의 트위터 계정을 필요로하지 않도록하고 싶습니다. 나는 트위터 응용 프로그램을 생성하고 인증하기 전에 소비자 키 & 비밀을 인코딩 오전 :Objective-C Twitter 1.1 API 응용 프로그램 전용 인증 403 금지됨

NSString *consumerKey = @"xxxxxxxxxxxx"; 
NSString *consumerSecret = @"yyyyyyyyyyyyyyyyyyyy"; 

NSString *consumerKeyRFC1738 = [consumerKey stringByAddingPercentEscapesUsingEncoding: 
NSASCIIStringEncoding]; 
NSString *consumerSecretRFC1738 = [consumerSecret stringByAddingPercentEscapesUsingEncoding: 
            NSASCIIStringEncoding]; 

NSString *concatKeySecret = [[consumerKeyRFC1738 stringByAppendingString:@":"] stringByAppendingString:consumerSecretRFC1738]; 

NSLog(@"concatKeySecret:%@", concatKeySecret); 

NSString *concatKeySecretBase64 = [concatKeySecret base64EncodedString]; 

NSLog(@"concatKeySecretBase64:%@", concatKeySecretBase64); 


NSMutableURLRequest *request = [NSMutableURLRequest 
           requestWithURL:[NSURL URLWithString:@"https://api.twitter.com/oauth2/token"]]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:[@"Basic " stringByAppendingString:concatKeySecretBase64] forHTTPHeaderField:@"Authorization"]; 
[request setValue:@"application/x-www-form-urlencoded;charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 


NSString *str = @"grant-type=client_credentials"; 
NSData *httpBody = [str dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:httpBody]; 

NSLog(@"Request:%@",request); 

//NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

NSHTTPURLResponse *response; 
[NSURLConnection sendSynchronousRequest: request returningResponse: &response error: nil]; 

if ([response respondsToSelector:@selector(allHeaderFields)]) { 
    NSDictionary *dictionary = [response allHeaderFields]; 
    NSLog([dictionary description]); 
    //NSLog(@"ETAG:%@",[dictionary valueForKey:@"ETag"]); 
} 

내가받은 응답이 403 오류입니다. 내 HTTP 게시물의 서식을 올바르게 지정 했습니까?

{ 
"Cache-Control" = "no-cache, no-store, must-revalidate, pre-check=0, post-check=0"; 
"Content-Encoding" = gzip; 
"Content-Length" = 118; 
"Content-Type" = "application/json; charset=utf-8"; 
Date = "Tue, 30 Jul 2013 17:26:47 GMT"; 
Expires = "Tue, 31 Mar 1981 05:00:00 GMT"; 
"Last-Modified" = "Tue, 30 Jul 2013 17:26:47 GMT"; 
Pragma = "no-cache"; 
Server = tfe; 
"Set-Cookie" = "_twitter_sess=BAh7CDoMY3NyZl9pZCIlYWEwY2Y2NzU2NmQ3MjFjMTAyZmY2ZGFlNjFiZWNj                                                         0X1.67F4B01F90C18P-881MjQ6B2lkIiUzNmQ1YTE1ZDQxZTFiN2Q0MTFjNzY2MmI5YTE2NDVkYToPY3Jl                                                           0X1.7FFFB87P-1043YXRlZF9hdGwrCMQunjBAAQ                                                              1371904                                                             -1776385004--7706e5d6c3e090acdab9a3c94d433e11eab2b48b; domain=.twitter.com; path=/; HttpOnly"; 
Status = "403 Forbidden"; 
"Strict-Transport-Security" = "max-age=631138519"; 
Vary = "Accept-Encoding"; 
"x-frame-options" = DENY; 
"x-mid" = 62d49efa6db6ee537df4e330e351d93fbd0cf900; 
"x-runtime" = "0.01460"; 
"x-transaction" = 49b51f5559838ae4; 
"x-ua-compatible" = "IE=10,chrome=1"; 
"x-xss-protection" = "1; mode=block"; 
} 

답변

2
NSString *str = @"grant-type=client_credentials"; 

대신 하이픈,

NSString *str = @"grant_type=client_credentials"; 

참고 밑줄을 했어야!