我最近开始使用 Objective C 进行开发,并且正在尝试使用 Microsoft Translator API。到目前为止,如果我使用 appID,它就可以工作,但现在不推荐使用该方法。我正在尝试使用 OAuth 等以正确的方式学习它。
谁能给我一个样本(显然没有 clientID 和 client_secretcode,我都有)来获取 access_token?
编辑:看来我还不够清楚,所以这里有完整的故事。
我一直在尝试使用 Microsoft Translator API。在提出问题时,我发现了一个使用 AppID(现已弃用)的旧实现。
MS Translator API 使用 OAuth 进行身份验证,公平地说,当时我不知道如何处理它。现在,我这样做并发布了我的代码,以便人们在遇到同样问题时可以得到它。
希望现在更清楚了:)
这是我可以使用的示例:
-(IBAction)getToken:(id)sender {
NSString *clientSecret = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)CLIENT_SECRETCODE,
NULL,
(CFStringRef) @"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
NSMutableString* authHeader = [NSMutableString stringWithString:@"client_id="];
[authHeader appendString:CLIENT_ID];
[authHeader appendString:@"&client_secret="];
[authHeader appendString:clientSecret];
[authHeader appendString:@"&grant_type=client_credentials&scope=http://api.microsofttranslator.com"];
NSMutableURLRequest *request =[NSMutableURLRequest
requestWithURL:[NSURL URLWithString:TOKEN_STRING]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
const char *bytes = [authHeader UTF8String];
[request setHTTPBody:[NSData dataWithBytes:bytes length:strlen(bytes)]];
NSURLResponse* response;
NSError* error;
NSData* data = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
if (data != nil) {
NSString* contents = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSString *formattedContents = [contents stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
尽管它适用于 Microsoft Translation,但适用于其他服务应该不难。这里没有解析token,代码比较粗糙,由于我使用的是自动引用计数,需要注意的是,根据你的配置,可能需要autorelease。