2013-08-22 3 views
1

Я запрашиваю свой сервер с помощью AFNetworking, последней версии - на сегодняшний день.AFNetworking Получить полный ответ HTTP

Моя серверная часть PHP отправляет ошибку, связанную с PHP, но я не могу понять, что такое ошибка (поэтому я могу ее отлаживать), поскольку AFNetworking ожидает JSON.

Может ли кто-нибудь сказать мне, как я могу увидеть полный HTTP-результат. Я исследовал, и я знаю, что это связано с operation.responseString внутри блока success/fail. Блок моего текущего блока не имеет AFHTTPRequestOperation* operation, и я не могу добавить его как другую переменную блока.

Я бы очень признателен за помощь.

Следующий код использует

NSURL *url = [[NSURL alloc]initWithString:URL]; 
    AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url]; 


    NSURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:URLPATH parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
          { 
           //... 
           } 

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
                         success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){ 
                          NSLog(@"Inside the success block %@",JSON); 
                          [[self delegate ]shareExerciseDone:JSON]; 
                          [[self delegate] activityIndicatorFinish]; 

                         } 
                         failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){ 

                          NSLog(@"Response text is: %@", operation.responseString); 
                          NSLog(@"json text is: %@", JSON); 
                          NSLog(@"Request failed with error: %@, %@", error, error.userInfo); 

                          [[self delegate] activityIndicatorFinish]; 
                         }]; 

    [operation start]; 

Ошибка

Request failed with error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0xc1b4520 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}, { 
    NSDebugDescription = "JSON text did not start with array or object and option to allow fragments not set."; 
+0

Вы ищете 'response.statusCode' или' response.allHeaderFields'? [Документация NSHTTPURLResponse] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPURLResponse_Class/Reference/Reference.html) – danielbeard

+0

Нет, мне нужен полный текст HTML, который выводится PHP. Я хочу посмотреть, где это не удается, и что посылает это не JSON. –

ответ

1

Не используйте AFJSONRequestOperation, просто используйте AFHTTPRequestOperation.

+0

Да, это или использовать прокси, например, прокси-сервер от Google. –

1

для загрузки изображений С прошивкой на сервер я использую Afnetworking

вы можете попробовать с этим Code.and вас получат ответ в случае успеха или неудачи.

NSData *userImgToUpload = UIImagePNGRepresentation(userImg.image); 
NSURL *url = [NSURL URLWithString:@"www.domainname.com"]; 
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSLog(@"%@",@"Uploading data"); 
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:usernameTxt.text,@"username", firstnameTxt.text,@"first_name",lastnameTxt.text,@"last_name", nil]; 

//  Upload Image 
    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/addPatient" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     [formData appendPartWithFileData:userImgToUpload name:@"patientimage" fileName:[NSString stringWithFormat:@"%@.png",usernameTxt.text] mimeType:@"image/png"]; 
    }]; 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"response: %@",[operation.responseString objectFromJSONString]); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Upload Failed"); 
     NSLog(@"error: %@", [operation error]); 
    }]; 
    [operation start]; 
0

Вы должны слушать для AFNetworkingOperationDidStartNotification и AFNetworkingOperationDidFinishNotification событий, что огонь в начале и в конце операции:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(YourOperationStartMethod:) 
              name:AFNetworkingOperationDidStartNotification 
              object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(YourOperationFinishMethod:) 
              name:AFNetworkingOperationDidFinishNotification 
              object:nil]; 

Вы можете захватить объект операции из уведомления, как это:

AFHTTPRequestOperation *operation = 
     (AFHTTPRequestOperation *) [notification object]; 

Объект operation содержит request и response Недвижимость.

Хороший пример того, как все это можно найти в плагине AFHTTPRequestOperationLogger (который, конечно же, вы могли бы просто использовать вместо написания своей собственной вещи).