Tôi đang cố tìm cách, sử dụng AFNetworking, để đặt tiêu đề Kiểu nội dung là ứng dụng/json và POST với JSON trong phần thân. Các phương thức mà tôi thấy trong tài liệu (postPath và requestWithMethod) đều lấy một từ điển các tham số, mà tôi giả sử được mã hóa theo cú pháp biểu mẫu chuẩn. Có ai biết cách hướng dẫn AFHTTPClient sử dụng JSON cho cơ thể không, hoặc tôi có cần viết yêu cầu của riêng mình không?Đăng JSON làm cơ thể của yêu cầu POST bằng cách sử dụng AFHTTPClient
Trả lời
Tôi đã tiếp tục và kiểm tra AFNetworking mới nhất từ master branch. Ra khỏi hộp tôi đã có thể có được những hành vi mong muốn. Tôi nhìn và nó có vẻ như một sự thay đổi gần đây (6 tháng 10), do đó bạn có thể chỉ cần kéo mới nhất.
tôi đã viết đoạn mã sau để thực hiện một yêu cầu:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:8080/"]];
[client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil]
success:^(id object) {
NSLog(@"%@", object);
} failure:^(NSHTTPURLResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
[client release];
Theo ủy quyền của tôi, tôi có thể thấy yêu cầu liệu:
POST /hello123 HTTP/1.1
Host: localhost:8080
Accept-Language: en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8
User-Agent: info.evanlong.apps.TestSample/1.0 (unknown, iPhone OS 4.3.2, iPhone Simulator, Scale/1.000000)
Accept-Encoding: gzip
Content-Type: application/json; charset=utf-8
Accept: */*
Content-Length: 21
Connection: keep-alive
{"k2":"v2","k1":"v1"}
Từ nguồn AFHTTPClient bạn có thể thấy rằng JSON mã hóa là mặc định dựa trên line 170 và line 268.
Đối với tôi, json KHÔNG phải là mã hóa mặc định. Bạn có thể tự thiết lập nó như là mã hóa mặc định như thế này:
(sử dụng mã Evan)
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:8080/"]];
[client setParameterEncoding:AFJSONParameterEncoding];
[client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil]
success:^(id object) {
NSLog(@"%@", object);
} failure:^(NSHTTPURLResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
[client release];
phần quan trọng:
[client setParameterEncoding:AFJSONParameterEncoding];
Cảm ơn bạn rất nhiều! Bạn đã đúng, '[client setParameterEncoding: AFJSONParameterEncoding];' bị thiếu. Nhưng ngoài ra có vẻ như điều này cũng được yêu cầu cho nó thực sự làm việc với NSDictionary: '[client registerHTTPOperationClass: [lớp AFJSONRequestOperation]];' – thedp
Cảm ơn bạn rất nhiều. Bạn tiết kiệm ngày của tôi !! – kb920
- 1. Đăng JSON bằng cách sử dụng các yêu cầu Python
- 2. Sử dụng Yêu cầu POST JSON
- 3. Tôi có thể đăng chuỗi JSON/XML làm yêu cầu POST cho REST ServiceStack không?
- 4. Yêu cầu AFNetworking và POST
- 5. Yêu cầu POST với phần thân JSON
- 6. Rails RestKit POST yêu cầu lớp gốc của json thiếu
- 7. CodeIgniter Rest Server xử lý yêu cầu POST của JSON
- 8. Yêu cầu POST bằng wrk?
- 9. Cách gửi yêu cầu HTTP POST bằng nội dung gzip?
- 10. Cách nhận JSON trong yêu cầu POST trong CherryPy?
- 11. Spring MVC: Đừng deserialize JSON yêu cầu cơ thể
- 12. lwp-yêu cầu trong vỏ: làm thế nào để làm cho yêu cầu POST với cơ thể?
- 13. Gửi yêu cầu HTTP POST trong iOS với JSON
- 14. Ruby: Làm cách nào để gửi yêu cầu POST JSON bằng Curb?
- 15. Gửi yêu cầu POST qua HTTP bằng cách sử dụng Safari trên máy Mac
- 16. Làm thế nào để POST yêu cầu sử dụng RestSharp
- 17. Cách nhận JSON trong yêu cầu POST node.js express?
- 18. Đọc JSON POST bằng cách sử dụng PHP
- 19. Gửi yêu cầu đăng bằng lưới/http
- 20. Khôi phục POST bằng cách sử dụng JSON
- 21. Yêu cầu REST của POST XML bằng cách sử dụng Python
- 22. Cách gửi yêu cầu POST?
- 23. Yêu cầu POST (Javascript)
- 24. Chuyển đổi yêu cầu POST curl sang Python chỉ bằng cách sử dụng thư viện chuẩn
- 25. Cách sử dụng yêu cầu đăng iframe (tên miền chéo)?
- 26. yêu cầu POST của node.js
- 27. Gọi lại yêu cầu AJAX bằng cách sử dụng jQuery
- 28. Làm cách nào để POST một bộ đệm của JSON bằng cách sử dụng libcurl?
- 29. Sử dụng Yêu cầu Python: Phiên, Cookie và POST
- 30. Sử dụng ứng dụng khách áo để thực hiện thao tác POST với thông số yêu cầu và yêu cầu
Huh, tôi đã không nhận ra JSON được thiết lập để được mã hóa mặc định. Đây là một sai lầm (mã hóa biểu mẫu URL luôn luôn là ý định của tôi là mặc định; Tôi không chắc chắn làm thế nào mà trượt vào). @EricAndres: Hãy lưu ý điều này và đặt mã hóa tham số thành JSON theo cách thủ công, với 'self.parameterEncoding = AFJSONParameterEncoding;' trong mã của bạn. – mattt
Tuyệt vời, cảm ơn bạn đã phản hồi. Tôi sẽ thử cài đặt self.parameterEncoding sau khi tôi có cơ hội. –
hmm ... json không phải là mã hóa mặc định, nhưng NVP là (vào đầu năm 2013) – stackOverFlew