我最近在Objective C中进行了开发,并且我正在尝试使用Microsoft Translator API。到目前为止,如果我使用appID,它仍然有效,但现在不推荐使用该方法。我正在尝试使用OAuth等方法学习它。
有人可以给我一个样本(显然没有clientID和client_secretcode,我都有)获取access_token吗?
编辑:似乎我还不够清楚,所以有完整的故事。
我一直在尝试使用Microsoft Translator API。在提问时,我发现了一个使用AppID的旧实现(现已弃用)。 MS Translator API正在使用OAuth进行身份验证,并且公平,当时我不知道如何处理它。现在,我这样做,我发布了我的代码,以便人们可以在遇到同样问题时得到它。
希望现在更清楚了:))
答案 0 :(得分:1)
以下是我可以提供的样本:
-(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翻译,也不难将其用于其他服务。这里,令牌没有被解析,代码很粗糙,因为我使用自动引用计数,应该注意在配置后可能需要自动释放。