Wypróbowuję nową wersję 2.0 AFNetworking i otrzymuję powyższy błąd. Jakiś pomysł dlaczego tak się dzieje? Oto mój kod:
NSURL *URL = [NSURL URLWithString:kJSONlink];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[[NSOperationQueue mainQueue] addOperation:op];
Używam Xcode 5.0.
Oto komunikat o błędzie:
Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo=0xda2e670 {NSErrorFailingURLKey=kJSONlink, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xda35180> { URL: kJSONlink } { status code: 200, headers {
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 2898;
"Content-Type" = "text/html";
Date = "Tue, 01 Oct 2013 10:59:45 GMT";
"Keep-Alive" = "timeout=5, max=100";
Server = Apache;
Vary = "Accept-Encoding";
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}
Właśnie ukryłem JSON za pomocą kJSONlink. To powinno zwrócić JSON.
ios
afnetworking
afnetworking-2
jaytrixz
źródło
źródło
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
acceptableContentTypes
:)op.responseSerializer.acceptableContentTypes = [op.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
op.responseSerializer.acceptableContentTypes = NSSet(object: "text/html")
Ustawienie mojego
RequestOperationManager
Serializatora odpowiedzi w celuHTTPResponseSerializer
rozwiązania problemu.Cel C
Szybki
Dokonanie tej zmiany oznacza, że nie muszę dodawać
acceptableContentTypes
do każdej składanej prośby.źródło
AFJSONResponseSerializer
responseSerializer
sięAFJSONResponseSerializer
.Posunąłem odpowiedź / komentarz @ jaytrixz o krok dalej i dodałem „text / html” do istniejącego zestawu typów. W ten sposób, gdy naprawią go po stronie serwera do „application / json” lub „text / json”, twierdzę, że będzie działał bezproblemowo.
źródło
Po stronie serwera dodałem:
do mojego kodu .php, co również rozwiązało problem.
źródło
if(!headers_sent() ) { header('Content-Type: application/json'); }
To niezła poprawkaRozwiązuję ten problem z innej perspektywy.
Myślę, że jeśli serwer wysyła dane JSON z
Content-Type: text/html
nagłówkiem. Nie oznacza to, że serwer zamierzał wysłać ci trochę html, ale przypadkowo zmienił się na JSON. To znaczy, że serwer nie przejmuje się tym, co toContent-Type
jest nagłówek. Więc jeśli serwer nie dba o to po stronie klienta, lepiej zignoruj równieżContent-Type
nagłówek. Aby zignorowaćContent-Type
nagłówek, zaloguj sięAFNetworking
W ten sposób
AFJSONResponseSerializer
(domyślny) serializuje dane JSON bez sprawdzaniaContent-Type
nagłówka odpowiedzi.źródło
Prosty sposób na włączenie odbierania typu „tekst / zwykły”:
Podobnie jeśli chcesz włączyć typ zawartości „text / html”:
źródło
Próbowałem poniżej linii zgodnie z odpowiedzią @Andrie, ale nie działałem,
więc po dłuższym polowaniu zacząłem pracować nad tym, aby skutecznie działać.
Oto mój wycinek kodu.
Mam nadzieję, że to pomoże komuś tam.
źródło
To jedyna rzecz, którą znalazłem do pracy
źródło
Jeśli ktoś używa,
AFHTTPSessionManager
można to zrobić w ten sposób, aby rozwiązać problem,Podklasowałem,
AFHTTPSessionManager
gdzie to robię,źródło
W moim przypadku nie mam kontroli nad ustawieniami serwera, ale wiem, że oczekuje on „application / json” dla „Content-Type”. Zrobiłem to po stronie klienta iOS:
patrz błąd typu treści AFNetworking wersja 2
źródło
Po prostu dodaj ten wiersz:
źródło
Miałem w jakiś sposób podobny problem podczas pracy z AFNetworking z bazy kodu Swift, więc zostawiam to tutaj w zdalnej sprawie, gdy ktoś jest tak pechowy jak ja, że muszę pracować w takiej konfiguracji. Jeśli tak, czuję, że jesteś kumplem, bądź silny!
Operacja została braku powodu „niedopuszczalnego content-type”, mimo mnie rzeczywiście ustawienie
acceptableContentTypes
zSet
zawierającego treść wartość rodzaju.Rozwiązaniem dla mnie było ulepszenie kodu Swift, aby był bardziej przyjazny dla Objective-C, tak myślę :
źródło
Dobre pytanie zawsze zawiera wiele odpowiedzi, aby je zmniejszyć i pomóc wybrać właściwą odpowiedź, tutaj też dodam własną. Przetestowałem to i działa dobrze.
źródło
źródło