0

AfNetworking AfHttpClientを使用してGoogleリーダーにログインしようとしていますが、このエラーが発生し、理解できないようです。

以下は、AFNetworkingの私のサブクラスです。

// main url endpoints
#define GOOGLE_ACCOUNTS_BASE_URL @"https://www.google.com/accounts/"

@implementation ADPGoogleLoginClient

+ (ADPGoogleLoginClient *)sharedClient {
    static ADPGoogleLoginClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[ADPGoogleLoginClient alloc] initWithBaseURL:[NSURL     URLWithString:GOOGLE_ACCOUNTS_BASE_URL]];
    });

    return _sharedClient;
}

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    [self registerHTTPOperationClass:[AFXMLRequestOperation class]];

    // Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
    [self setDefaultHeader:@"Content-type" value:@"text/plain"];
    [self setDefaultHeader:@"Accept" value:@"text/plain"];

    return self;
}

@end

次に、次のコードを使用してリクエストを作成しようとします。

//set up request params
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"googlereader-ios-client", @"client",
                            [keychainCredentials objectForKey:(__bridge id)kSecAttrAccount], @"Email",
                            [keychainCredentials objectForKey:(__bridge id)kSecValueData], @"Passwd",
                            @"reader", @"service",
                            @"ipad", @"source", nil];

    //make requests
    [[ADPGoogleLoginClient sharedClient] getPath:@"ClientLogin" 
                                      parameters:params
                                         success:^(AFHTTPRequestOperation *operation , id responseObject)
     {
         //parse out token and store in keychain
         NSString* responseString = [operation responseString];  
         NSString* authToken = [[[responseString componentsSeparatedByString:@"\n"] objectAtIndex:2] 
                                stringByReplacingOccurrencesOfString:@"Auth=" withString:@""];

         keychainToken = [[KeychainItemWrapper alloc] initWithIdentifier:@"GReaderToken" accessGroup:nil]; 
         [keychainToken setObject:authToken forKey:(__bridge id)kSecValueData]; 

         loginSuccess();

     } 
           failure:^(AFHTTPRequestOperation *operation, NSError *error) 
     {
         NSLog(@"There was an error logging into Reader - %@", [error localizedDescription]);

         loginFailure(error);
     }];

デフォルトのヘッダーをに設定しています

[self setDefaultHeader:@"Content-type" value:@"text/plain"];
    [self setDefaultHeader:@"Accept" value:@"text/plain"];

だから、なぜそれがまだxmlを期待していると思っているのかわかりませんか?

4

2 に答える 2

6

リクエストのヘッダーを設定してContent-Typeいますが、表示されているエラーはレスポンスからのものです。リクエストが「成功」したと見なされるためには、コンテンツタイプが期待と一致する必要があります(XMLを期待したときにJSON応答を解析しようとしないようにするため)。

同じエラーコードで、実際に返されるコンテンツタイプについて言及しているはずです。それが実際にXMLである場合は、を使用してそれを追加するAFXMLRequestOperation +addAcceptableContentTypes:と、すべてが正常に機能するはずです。

于 2012-06-11T15:01:17.930 に答える
1

こんにちはマットなので、私はこれをテストすることに取り掛かりました。間違ったAF操作を登録していたようです。私が変更され

[self registerHTTPOperationClass:[AFXMLRequestOperation class]]; 

[self registerHTTPOperationClass:[AFHTTPRequestOperation class]]; 

そして、すべてが良かったです!

于 2012-06-14T15:57:23.847 に答える