1

在 12 年 8 月 1 日 Bing 将他们的搜索 api 修改为 Azure,如何在 Objective-C 中进行身份验证以使用 Azure 中的新 bing 搜索 api?

我最好的猜测是从迁移 word 文档中提供的 PHP 示例中学习!!http://go.microsoft.com/fwlink/?LinkID=248077(天哪,你不能设置一个网页吗!)或者这个 Java 问题 - Bing Search API Azure Marketplace Authentication in Java

4

2 回答 2

3

我正在使用 ASIHTTPRequest 通过以下代码进行身份验证。

NSString *queryString = [NSString stringWithFormat:@"'%@'", queryString];
queryString = [queryString urlEncodeUsingEncoding:NSUTF8StringEncoding]; //You'll have to implement url encoding method, preferably in a string category file

NSString *urlString = [NSString stringWithFormat:@"https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Image?Query=%@&Market='en-US'&$top=50&$format=json", queryString];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString] ];
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic];
[request setUsername:@"YOUR_KEY_HERE"];
[request setPassword:@"YOUR_KEY_HERE"];
[request setDelegate:self];
[request startAsynchronous];

请注意,不需要 appID。只是将您的密钥作为用户名和密码传递。它正在成功获取数据。

但是,不能真正将数据转换为 NSString。尝试了每种编码,但无法从数据中获取字符串。最初的谷歌搜索说它是 UTF-8 编码的。但没有成功。

要使上述代码正常工作,您必须添加 ASIHTTP 框架。

另一件事是,我的猜测是使用这种格式的 base64 编码字符串 your_key:yourkey 也应该适用于基本身份验证。

于 2012-08-04T14:57:38.597 回答
0

我只使用 NSUrlConnection 就能让它工作。你必须先base64encode

NSString *keyString = [NSString stringWithFormat:@"%@:%@", BING_SEARCH_API_KEY, BING_SEARCH_API_KEY];
NSData *plainTextData = [keyString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainTextData base64EncodedString];

设置您的请求

NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
[req setURL:[NSURL URLWithString:searchUrl]];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", base64String];
[req setValue:authValue forHTTPHeaderField:@"Authorization"];

提出请求

NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];

查看有关如何形成searchUrl的文档,然后根据您在$format=中指定的格式处理数据(我使用的是json,所以我的看起来像):

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

我省略了错误处理,不要忘记通过检查响应和错误来添加它。

于 2013-03-08T23:15:20.780 回答