요청 실패: 허용되지 않는 내용 유형: AFNetworking 2.0을 사용하는 text/html
AF네트워킹의 새로운 버전 2.0을 사용해보고 있는데 위의 오류가 발생하고 있습니다.왜 이런 일이 일어나는지 아십니까?내 코드는 다음과 같습니다.
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];
Xcode 5.0을 사용하고 있습니다.
또한 다음과 같은 오류 메시지가 표시됩니다.
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}
저는 방금 kJSONlink를 사용하여 JSON을 숨겼습니다.그러면 JSON이 반환됩니다.
이것은 서버가 다음을 전송하고 있음을 의미합니다."text/html"
이미 지원되는 유형 대신 사용할 수 있습니다.제 해결책은 다음과 같습니다."text/html"
로.acceptableContentTypes
에 넣다.AFURLResponseSerialization
클래스. "허용 가능한 내용"을 검색하십시오.유형" 및 추가@"text/html"
수동으로 설정합니다.
물론 이상적인 해결책은 서버에서 보낸 유형을 변경하는 것이지만, 이를 위해서는 서버 팀과 상의해야 합니다.
내 설정RequestOperationManager
응답 직렬화 프로그램:HTTPResponseSerializer
문제를 해결했습니다.
목표-C
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
스위프트
manager.responseSerializer = AFHTTPResponseSerializer()
이 변경은 추가할 필요가 없음을 의미합니다.acceptableContentTypes
제가 요청하는 모든 것에.
저는 @jaytrixz의 답변/댓글을 한 걸음 더 나아가 기존 유형 집합에 "text/html"을 추가했습니다.그런 식으로 서버 측에서 "application/json" 또는 "text/json"으로 수정하면 원활하게 작동합니다.
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
서버 측면에서 다음을 추가했습니다.
header('Content-type: application/json');
.vmdk 코드에 입력하면 문제가 해결됩니다.
저는 이 문제를 다른 관점에서 해결합니다.
나는 서버가 JSON 데이터를 보낼 때Content-Type: text/html
표제의서버 담당자가 당신에게 html을 보내려다가 실수로 JSON으로 변경되었다는 뜻이 아닙니다.그것은 서버 담당자가 단지 무엇에 신경 쓰지 않는다는 것을 의미합니다.Content-Type
머리글은.따라서 서버 담당자가 클라이언트 측으로서 신경 쓰지 않는다면 무시하는 것이 좋습니다.Content-Type
헤더도 있습니다.무시하기Content-Type
헤더 체크인AFNetworking
manager.responseSerializer.acceptableContentTypes = nil;
이런 식으로.AFJSONResponseSerializer
(기본값)은 확인하지 않고 JSON 데이터를 직렬화합니다.Content-Type
응답 헤더에 있습니다.
"텍스트/일반" 내용 유형을 수신할 수 있는 간단한 방법:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
마찬가지로 "text/html" 내용 유형을 사용하려면 다음을 수행합니다.
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
@Andrie 답변에 따라 아래 라인을 시도했지만 작동하지 않았습니다.
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
그래서 사냥을 더 한 후에, 저는 그것이 성공적으로 작동할 수 있도록 노력했습니다.
여기 제 코드 캡처가 있습니다.
AFHTTPRequestOperationManager *operation = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
AFJSONResponseSerializer *jsonResponseSerializer = [AFJSONResponseSerializer serializer];
NSMutableSet *jsonAcceptableContentTypes = [NSMutableSet setWithSet:jsonResponseSerializer.acceptableContentTypes];
[jsonAcceptableContentTypes addObject:@"text/plain"];
jsonResponseSerializer.acceptableContentTypes = jsonAcceptableContentTypes;
operation.responseSerializer = jsonResponseSerializer;
이것이 누군가에게 도움이 되길 바랍니다.
이것이 제가 일할 수 있는 유일한 것입니다.
-(void) testHTTPS {
AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
[securityPolicy setAllowInvalidCertificates:YES];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:securityPolicy];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:[NSString stringWithFormat:@"%@", HOST] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@", string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
다른 사용자가 사용하는 경우AFHTTPSessionManager
그러면 문제를 해결하기 위해 이렇게 할 수 있습니다.
하위 분류했습니다.AFHTTPSessionManager
내가 지금 하고 있는 곳은
NSMutableSet *contentTypes = [[NSMutableSet alloc] initWithSet:self.responseSerializer.acceptableContentTypes];
[contentTypes addObject:@"text/html"];
self.responseSerializer.acceptableContentTypes = contentTypes;
저의 경우, 서버 설정을 제어할 수 없지만, "Content-Type"에 대한 "application/json"이 필요하다는 것은 알고 있습니다.iOS 클라이언트 쪽에서 이 작업을 수행했습니다.
manager.requestSerializer = [AFJSONRequestSerializer serializer];
다음 행만 추가합니다.
operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
좋은 질문은 항상 정답을 줄이고 선택하는 데 도움이 되는 여러 개의 답을 가지고 있습니다. 여기에 저도 제 질문을 추가합니다.저는 그것을 테스트했고 그것은 잘 작동합니다.
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.yourdomain.com/appname/data/ws/index.php/user/login/"]];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:@"POST" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *json = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@", json);
//Now convert json string to dictionary.
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error.localizedDescription);
}];
저는 스위프트 코드베이스에서 AF네트워킹으로 작업하는 데 비슷한 문제가 있었습니다. 그래서 저만큼 운이 나쁜 사람이 그런 환경에서 작업해야 하는 경우를 대비해 이 문제를 여기에 남깁니다.만약 그렇다면, 나는 네가 친구라고 생각해, 힘내!
"허용할 수 없는 유형"을 "할 수 내용 유형입니다. 실제로 설정한 내용 유형은acceptableContentTypes
Set
문제의 내용 유형 값을 포함합니다.
제가 해결할 수 있는 방법은 Swift 코드를 보다 객관적이고 우호적으로 조정하는 것이었습니다.
serializer.acceptableContentTypes = NSSet(array: ["application/xml", "text/xml", "text/plain"]) as Set<NSObject>
UIImage *image = [UIImage imageNamed:@"decline_clicked.png"];
NSData *imageData = UIImageJPEGRepresentation(image,1);
NSString *queryStringss = [NSString stringWithFormat:@"http://119.9.77.121/lets_chat/index.php/webservices/uploadfile/"];
queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
[manager POST:queryStringss parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
[formData appendPartWithFileData:imageData name:@"fileName" fileName:@"decline_clicked.png" mimeType:@"image/jpeg"];
}
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSDictionary *dict = [responseObject objectForKey:@"Result"];
NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
NSLog(@"Error: %@ ***** %@", operation.responseString, error);
}];
언급URL : https://stackoverflow.com/questions/19114623/request-failed-unacceptable-content-type-text-html-using-afnetworking-2-0
'prosource' 카테고리의 다른 글
스크립트 + 스크립트에서 변수의 유형을 확인하는 방법은 무엇입니까? (0) | 2023.06.07 |
---|---|
Visual Format Language(시각적 형식 언어)를 사용하여 뷰의 중앙에 보기 (0) | 2023.06.07 |
C 및 C++에서 인덱스[어레이]로 어레이 액세스 (0) | 2023.06.07 |
다중 처리 : tqdm을 사용하여 진행률 표시줄 표시 (0) | 2023.06.07 |
UI 웹 보기의 콘텐츠 크기를 결정하는 방법은 무엇입니까? (0) | 2023.06.07 |