2010-03-02 3 views
1

iPhone 트위터 앱에서 OAuth/xAuth를 사용 중이며 특수 문자가 포함 된 비밀번호에 문제가 있습니다. 예 : "password &". 첫째로, 나는 수행하여 26 %로 & 변환하고이 잘 "암호 % 26"으로 인코딩URL 인코딩 된 문자열을 사용할 때 iPhone의 OADataFetcher에 문제가 발생했습니다.

NSString *encodedPassword = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                       NULL, 
                       (CFStringRef)thePassword, 
                       NULL, 
                       (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                       kCFStringEncodingUTF8); 

. 나는 다음 OAMutableURLRequest의 매개 변수로 설정하고있다 :

Error Domain=NSURLErrorDomain Code=-1012 UserInfo=0x4823e00 "Operation could not be completed. (NSURLErrorDomain error -1012.)"

내가 잘못 여기서 뭐하는 거지 :

[request setParameters:[NSArray arrayWithObjects: 
         [OARequestParameter requestParameterWithName:@"x_auth_mode" value:@"client_auth"], 
         [OARequestParameter requestParameterWithName:@"x_auth_username" value:encodedUsername], 
         [OARequestParameter requestParameterWithName:@"x_auth_password" value:encodedPassword], 
         nil]]; 

OADataFetcher를 사용하여 요청을 전송하면, 나는 NSUrlError받을? 암호를 &으로 남겨두면 코드가 파손됩니다 (setParamaters 배열은 꺼내집니다). 누구든지 OAuth를 사용하기 전에이 문제를 겪었습니까?

만약 내가 영숫자 암호를 가지고 있다면 모든 것이 잘 작동합니다. 어떤 지침을 주셔서 감사합니다!

답변

0

OAuthRequestParameter는 이미 이름과 값을 인코딩합니다. 특히 &이 문제를 일으킬 수 있습니다. 다른 비표준 문자를 사용해 보셨습니까? OAuth 라이브러리 자체를 수정해야 할 수도 있습니다.

0

문제는 사용자 이름과 비밀번호를 인코딩하기 위해 버그가있는 stringByAddingPercentEscapesUsingEncoding을 사용하는 표준 OAuth 라이브러리입니다.

내 솔루션 OARequestParameter에 다음과 같은 방법을 재정의 할 범주를 만드는 것이 었습니다

- (NSString *)URLEncodedName 
{ 
return [self.name stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
} 

- (NSString *)URLEncodedValue 
{ 
    return [self.value stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
} 

예 :

넣어 어딘가에 프로젝트의 다음

//the .h file 
#import "OARequestParameter.h" 

@interface OARequestParameter (YourApp) 

@end 

및 버그를 오버라이드 (override) 방법 :

#import "OARequestParameter+YourApp.h" 


@implementation OARequestParameter (YourApp) 

-(NSString*)encode:(NSString*)unencodedString 
{ 
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
         NULL, 
         (CFStringRef)unencodedString, 
         NULL, 
         (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
         kCFStringEncodingUTF8); 
return [encodedString autorelease]; 
} 

- (NSString *)URLEncodedName 
{ 
//return [self.name stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
return [self encode:self.name]; 
} 

- (NSString *)URLEncodedValue 
{ 
    //return [self.value stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
return [self encode:self.value]; 
} 

@end 
관련 문제