Próbuję znaleźć sposób, za pomocą AFNetworking, ustawić nagłówek Content-Type na aplikację/json i POST z JSON w ciele. Metody, które widzę w dokumentacji (postPath i requestWithMethod), pobierają słownik parametrów, który, jak zakładam, jest zakodowany w standardowej składni formularza. Czy ktoś wie o sposobie instruowania agenta AFHTTPClient, aby używał JSON-a dla ciała, czy też muszę sam go napisać?Księgowanie JSON jako treść żądania POST za pomocą AFHTTPClient
Odpowiedz
Poszedłem dalej i sprawdziłem najnowsze AFNetworking od ich master branch. Po wyjęciu z pudełka udało mi się uzyskać pożądane zachowanie. Spojrzałem i wygląda na ostatnią zmianę (6 października), więc możesz po prostu wyciągnąć najnowszą.
napisałem poniższy kod, aby złożyć zamówienie:
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];
pod moim pełnomocnika widzę surowego żądanie:
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"}
od źródła AFHTTPClient widać, że kodowanie JSON jest domyślnie na podstawie line 170 i line 268.
Dla mnie json nie był domyślnym kodowaniem. Można ręcznie ustawić go jako domyślny kodowania jak ten:
(za pomocą kodu Evana)
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];
kluczowa część:
[client setParameterEncoding:AFJSONParameterEncoding];
Dziękuję bardzo! Masz rację, brakowało '[client setParameterEncoding: AFJSONParameterEncoding];'. Ponadto wydaje się, że jest to również wymagane, ponieważ faktycznie działa z NSDictionary: '[rejestr klientaHTTPOperationClass: [klasa AFJSONRequestOperation]];' – thedp
Dziękuję bardzo. Ratujesz mój dzień! – kb920
- 1. Wysyłanie żądania JSON POST za pomocą preprocesora BSF
- 2. Jak zapisać treść żądania POST jako plik w .NET
- 3. Treść żądania POST jest pusta lub pusta
- 4. Uzyskaj treść żądania POST z HttpServletRequest
- 5. Sprawdź, w jaki sposób interfejs API obsługuje nieprawidłową treść żądania składni JSON za pomocą pliku node.js
- 6. Wysyłanie JSON za pośrednictwem żądania CURL POST do Sinatry
- 7. Korzystanie z żądania JSON POST
- 8. analizowaniem JSON żądania POST C#
- 9. Ruby: Jak wysłać żądanie POST JSON za pomocą Curb?
- 10. ASP MVC Wyświetl treść jako JSON
- 11. Uzyskaj treść żądania jako ciąg znaków w Django
- 12. Uzyskaj treść żądania POST w działaniu kontrolera MVC
- 13. Wysyłanie żądania POST danych RAW za pomocą formularza HTML?
- 14. Jak przekazać dynamiczną treść żądania json w listonoszu
- 15. Serializowanie obiektu żądania za pomocą JSON
- 16. Uzyskiwanie treści treści żądania za pomocą metody POST Retrofit 2.0
- 17. Wysyłanie żądania HTTP POST JSON z Androida
- 18. Powodowane przez: retrofit.RetrofitError: metoda POST musi mieć treść żądania
- 19. Jak poprawnie odczytać treść żądania POST w module obsługi?
- 20. PHP: Uzyskaj treść żądania odebranego
- 21. Wyślij zagnieżdżony JSON za pomocą AFNetworking
- 22. DrawerLayout ListView nie jest rysowane za pomocą GLSurfaceView jako treść
- 23. Wysyłanie żądania pocztowego za pomocą sieci/http
- 24. Żądanie POST za pomocą RCurl
- 25. Pobierz: POST json dane
- 26. Prześlij plik przez C# za pomocą żądania JSON i RestSharp
- 27. Złapanie nielegalnych danych JSON POST w Expressie?
- 28. Jak wysłać żądanie POST jako JSON?
- 29. Generowanie ładunku JSON dla żądania HTTP POST w Objective-C
- 30. AFNetworking wyślij tablicę w parametrach JSON żądania końcowego
Huh, nie zdawałem sobie sprawy JSON została ustawiona na domyślne kodowanie. To błąd (kodowanie formularzy URL zawsze było moim zamiarem domyślnym, nie jestem pewien, jak to się stało). @EricAndres: Zwróćcie uwagę na to i ustawcie kodowanie parametrów na JSON ręcznie, z 'self.parameterEncoding = AFJSONParameterEncoding;' w kodzie. – mattt
Niesamowite, dziękuję za odpowiedź. Wypróbuję ustawienie self.parameterEncoding później, gdy dostanę szansę. –
hmm ... json nie był domyślnym kodowaniem, ale NVP było (od początku 2013) – stackOverFlew