0

我正在尝试制作一个使用 OAUth 1 连接到 Web 服务的应用程序,但遇到了一些麻烦。这是我的获取请求的方法:

- (void)loadUserProfile
{
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[baseUrl]];
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
                                                        path:[NSString  stringWithFormat:@"/1/user/%@/profile.json", [SSKeychain passwordForService:@"[service]" account:@"encoded_user_id"]]
                                                  parameters:nil];

    NSString *postString = [NSString  stringWithFormat:@"oauth_consumer_key=%@&oauth_token=%@&oauth_nonce=%@&oauth_signature_method=%@&oauth_timestamp=%@&oauth_version=%@", self.auth.consumerKey, [SSKeychain  passwordForService:@"[service]" account:@"oauth_token"], self.auth.nonce,  self.auth.signatureMethod, self.auth.timestamp, self.auth.version];
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        // Print the response body in text
        NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    [operation start];
}

当我调用此方法时,出现以下错误:

Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."  UserInfo=0x8efa7f0  {NSErrorFailingURLStringKey=https://api.fitbit.com/1/user/[id]/profile.json,  NSErrorFailingURLKey=https://api.fitbit.com/1/user/[id]/profile.json,  NSLocalizedDescription=The network connection was lost., NSUnderlyingError=0x8bdb2c0 "The  network connection was lost."}

我试图获取的资源记录在这里:https://wiki.fitbit.com/display/API/OAuth+Authentication+in+the+Fitbit+API#OAuthAuthenticationintheFitbitAPI-tokenCredentials

我以前没有用过OAuth 1,我以前从未见过这个错误,所以我不知道如何解决它。有任何想法吗?

4

3 回答 3

1

我通过使用Simple Oauth1解决了它。像这样:

NSString *path = [NSString stringWithFormat:@"/1/user/%@/profile.json", [SSKeychain    passwordForService:@"Fitbit" account:@"fitbit_encoded_user_id"]];
NSURLRequest *preparedRequest = [OAuth1Controller preparedRequestForPath:path
                                                              parameters:nil
                                                              HTTPmethod:@"GET"
                                                              oauthToken:[SSKeychain passwordForService:@"Fitbit" account:@"fitbit_oauth_token"]
                                                             oauthSecret:[SSKeychain passwordForService:@"Fitbit" account:@"fitbit_oauth_token_secret"]];

AFJSONRequestOperation *operation = [AFJSONRequestOperation   JSONRequestOperationWithRequest:preparedRequest success:^(NSURLRequest *request,   NSHTTPURLResponse *response, id jsonObject) {
    NSLog(@"JSON: %@", jsonObject);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON, NSError *error) {
    NSLog(@"Error: %@", error);
}];

[operation start];
于 2013-07-29T06:59:01.217 回答
0

就我而言,解决方案是重新启动 Xcode 和模拟器。

该 URL 在桌面浏览器和curl. 意识到这一点给了一点暗示,环境可能有问题。

FWIW,Xcode 版本是 6.0 beta,构建 6A279r。

于 2014-08-13T20:16:09.203 回答
0

这里的问题是 AFHTTPClient 在方法结束时内存不足-loadUserProfile

您需要重构此代码,以便在您请求后客户端仍保留在内存中。

一种方法是使用单例模式,如 AFNetworking 中的示例代码所示。

https://github.com/AFNetworking/AFNetworking/blob/master/Example/Classes/AFAppDotNetAPIClient.m#L31

于 2013-07-27T09:42:19.737 回答