prosource

요청 실패: 허용되지 않는 내용 유형: AFNetworking 2.0을 사용하는 text/html

probook 2023. 6. 7. 22:59
반응형

요청 실패: 허용되지 않는 내용 유형: 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];

AF 네트워킹 버전 2 컨텐츠 유형 오류 참조

다음 행만 추가합니다.

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네트워킹으로 작업하는 데 비슷한 문제가 있었습니다. 그래서 저만큼 운이 나쁜 사람이 그런 환경에서 작업해야 하는 경우를 대비해 이 문제를 여기에 남깁니다.만약 그렇다면, 나는 네가 친구라고 생각해, 힘내!

"허용할 수 없는 유형"을 "할 수 내용 유형입니다. 실제로 설정한 내용 유형은acceptableContentTypesSet문제의 내용 유형 값을 포함합니다.

제가 해결할 수 있는 방법은 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

반응형