使用URL编码字符串时,iPhone上的OADataFetcher出现问题
我在iphonetwitter应用程序中使用OAuth/xAuth,密码中包含特殊字符时出现问题。例如密码&。首先,我通过执行以下操作将&转换为%26:使用URL编码字符串时,iPhone上的OADataFetcher出现问题,iphone,oauth,urlencode,Iphone,Oauth,Urlencode,我在iphonetwitter应用程序中使用OAuth/xAuth,密码中包含特殊字符时出现问题。例如密码&。首先,我通过执行以下操作将&转换为%26: NSString *encodedPassword = (NSString *)CFURLCreateStringByAddingPercentEscapes( NULL,
NSString *encodedPassword = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)thePassword,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 );
这会将其精细编码为密码%26。然后,我将其设置为OAMutableURLRequest的参数:
[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:
错误域=NSURLErrorDomain代码=-1012用户信息=0x4823e00无法完成操作。NSURlerorDomain错误-1012
我做错了什么?如果我在密码中留下&它会使我的代码崩溃,setParamaters数组将退出。在使用OAuth之前有人遇到过这个问题吗
如果我有字母数字密码,一切正常。。。谢谢你的指导 OAuthRequestParameter已经对名称和值进行了编码;这可能是因为&特别是在造成问题。您是否尝试过使用不同的非标准字符?可能需要修改OAuth库本身。问题在于,标准OAuth库使用错误字符串,通过添加PercenteScapesusingEncode对用户名和密码进行编码 我的解决方案是创建一个类别来覆盖OARequestParameter中的以下方法
- (NSString *)URLEncodedName
{
return [self.name stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
}
- (NSString *)URLEncodedValue
{
return [self.value stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
}
i、 e:
将以下内容放在项目中的某个位置:
//the .h file
#import "OARequestParameter.h"
@interface OARequestParameter (YourApp)
@end
并使用以下命令覆盖错误方法:
#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