-1

ここから AFNetworking をプロジェクトに統合しました。しかし、AFNetworking を使用してリクエストを取得すると、常に Failure ブロックに入ります。以下は私のコードです。ここで何が間違っているのか教えてください。

NSString *baseUrl = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA";
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager GET:baseUrl parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);

   //Always it invoke the Failure block
    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey];
        NSInteger statusCode = response.statusCode;
        NSLog(@"Error Code=%ld",statusCode);
        NSLog(@"Desc=%@",response.description);
    }];

注:- これは有効な URL です。 http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA

また、以下はエラーコードと説明です:-

Error Code 200
Error Description <NSHTTPURLResponse: 0x7fbab8509860> { URL: http://www.nactem.ac.uk/software/acromine/dictionary.py?sb=hmm } { status code: 200, headers {
    Connection = close;
    "Content-Type" = "text/plain; charset=UTF-8";
    Date = "Wed, 20 Apr 2016 00:17:27 GMT";
    Server = "Apache/2.2.15 (Scientific Linux)";
    "Transfer-Encoding" = Identity;
} }
4

3 に答える 3

1

私は答えを見つけました:-

NSString *url = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=hmm";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//Missing this line (Any request or response serializer dealing with HTTP is encouraged to subclass)
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                             options:kNilOptions
                                                               error:&error];
        NSLog(@"Success= %@",json);

    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey];
        NSInteger statusCode = response.statusCode;
        NSLog(@"Fail=%ld",statusCode);
    }];
于 2016-04-20T01:29:29.180 に答える
0

問題は、AFNetworking が探している応答のタイプにあります。テキスト/プレーンの応答を期待するように明示的に指示する場合は、成功のコールバックを実行する必要があります。managerオブジェクトを初期化する場所の直後にある次のコード行は、次のようにする必要があります。

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
于 2016-04-20T01:37:28.207 に答える
0

エラーの説明を見ると、役立つ説明が表示されます

Domain=com.alamofire.error.serialization.response Code=-1016 "リクエストが失敗しました: 受け入れられないコンテンツ タイプ: text/plain"

正しい修正は、application/jsonJSON のように見えるため、 content-type を作成することです。

于 2016-04-20T00:58:56.227 に答える