2015-11-17 14 views
6

Tôi đang sử dụng AFNetworking để thực hiện yêu cầu web trên API VolunteerMatch. Khi tôi thực hiện yêu cầu tôi nhận được 200 mã, tuy nhiên tôi không nhận được phản hồi. Đây là cách yêu cầu VolunteerMatch điển hình trông giống như:Mục tiêu API tình nguyện viên C

GET /api/call?action=helloWorld&query=... HTTP/1.1 
Host: www.volunteermatch.org 
Accept-Charset: UTF-8 
Content-Type: application/json 
Authorization: WSSE profile="UsernameToken" 
X-WSSE: UsernameToken Username="acme", PasswordDigest="quR/EWLAV4xLf9Zqyw4pDmfV9OY=", 
Nonce="d36e316282959a9ed4c89851497a717f", Created="2003-12-15T14:43:07-0700" 

Here là tài liệu mở rộng.

Đây là mã của tôi mà tôi đang sử dụng để làm yêu cầu của tôi:

// Create parameters 
    NSDictionary* param = @{ 
          @"action":@"helloWorld", 
          @"query":@"{\"name\":\"john\"}" 
          }; 

    // Create Manager 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

    // Add Headers 
    [manager.requestSerializer setValue:@"WWSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"]; 
    [manager.requestSerializer setValue:[CocoaWSSE headerWithUsername:@"XXXXX" password:@"XXXXXXXXXXX"] forHTTPHeaderField:@"X-WSSE"]; 

    // Perform Request 
    [manager GET:@"http://www.volunteermatch.org/api/call" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 
     NSLog(@"HTTP Request URL: %@", [operation.request URL]); 
     NSLog(@"HTTP Response Status Code: %ld", [operation.response statusCode]); 
     NSLog(@"HTTP Response Body: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 
     NSLog(@"HTTP Request failed: %@", error); 
    }]; 

Dưới đây là câu trả lời tôi nhận được:

2015-11-17 16:53:36.476 XXXXXX[85280:5969811] HTTP Response Status Code: 200 
2015-11-17 16:53:36.476 XXXXXX[85280:5969811] HTTP Response Body: (null) 
+0

Có bạn đã cố đưa ra yêu cầu giống hệt bên ngoài ứng dụng? Hãy thử sử dụng công cụ bên ngoài (ví dụ: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en) để kiểm tra xem cơ thể được mong đợi có thực sự chứa trong phản hồi hay không. – kajot

Trả lời

5

Cố gắng tích hợp AFNetworking mới nhất phiên bản 2.0 theo hướng dẫn here & đừng quên thêm AFSecurityPolicy.h, AFSecurityPolicy.m tệp. Điều này sẽ hỗ trợ các yêu cầu https:.

4

Trước tiên, bạn không được sắp xếp yêu cầu và sau đó thêm tiêu đề mới. Các tiêu đề sẽ không kết thúc trong (serialization) yêu cầu theo cách đó. Có thể bạn sẽ ổn nếu bạn đảo ngược điều đó.

+0

Tôi cập nhật mã cho những gì bạn đã nói tôi đã cung cấp nó trong câu hỏi ban đầu tuy nhiên tôi vẫn không nhận được phản hồi – Prad

6

tôi đang sử dụng một phương pháp phổ biến cho AFNetworking WS Calling. Sử dụng:

Gọi WS:

NSDictionary* param = @{ 
         @"action":@"helloWorld", 
         @"query":@"{\"name\":\"john\"}" 
         }; 

[self requestWithUrlString:@"URL" parmeters:paramDictionary success:^(NSDictionary *response) { 
    //code For Success 
} failure:^(NSError *error) { 
    // code for WS Responce failure 
}]; 

Thêm Hai Phương pháp: này hai phương pháp rất phổ biến, bạn có thể sử dụng các phương pháp phổ biến trong toàn bộ dự án sử dụng lớp NSObject. cũng thêm // xác định mã lỗi như ...

xác định kDefaultErrorCode 12345

- (void)requestWithUrlString:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure { 

[self requestWithUrl:stUrl parmeters:parameters success:^(NSDictionary *response) { 
    if([[response objectForKey:@"success"] boolValue]) { 
     if(success) { 
      success(response); 

     } 
    } 
    else { 
     NSError *error = [NSError errorWithDomain:@"Error" code:kDefaultErrorCode userInfo:@{NSLocalizedDescriptionKey:[response objectForKey:@"message"]}]; 
     if(failure) { 
      failure(error); 
     } 
    } 
} failure:^(NSError *error) { 
    if(failure) { 
     failure(error); 
    } 
}];} 

và // Set Headers trong Dưới Phương pháp (nếu có yêu cầu khác loại bỏ)

- (void)requestWithUrl:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *))failure { 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 


[manager.requestSerializer setValue:@"WWSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"]; 



[manager GET:stUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    if([responseObject isKindOfClass:[NSDictionary class]]) { 
     if(success) { 
      success(responseObject); 
     } 
    } 
    else { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
     if(success) { 
      success(response); 
     } 
    } 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
    if(failure) { 
     failure(error); 
    } 
}];} 

Đối bất kỳ vấn đề nào và hơn thế nữa Chi tiết please visit AFNetworking


CẬP NHẬT
---------- di cư với AFNetworking 3,0 --------- di chuyển AFN-2.0 của bạn để 3.0 với một số thay đổi nhỏ hài lòng chaeck here AFN 3.0

+0

Khi tôi thực hiện các yêu cầu này, đây là lỗi mà tôi nhận được lỗi này '' Term term app do uncaught exception 'NSInvalidArgumentException' , lý do: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: cố gắng chèn đối tượng nil từ các đối tượng [0]' '' ' – Prad

+0

được, hãy thử Ws này trong Poster hoặc Rest client. phản ứng là đúng hay không. tôi phản ứng có chứa các yếu tố HTMl. xin vui lòng kiểm tra và trả lời tôi. – Vvk

+0

tôi đã kiểm tra, Không có bất kỳ phản ứng nào được giải quyết từ phíaWS. vui lòng thêm Thành công và thất bại như {"thành công": 1} hoặc {"thành công": 0} – Vvk