অনুরোধ ব্যর্থ হয়েছে: অগ্রহণযোগ্য সামগ্রী-প্রকার: পাঠ্য / এইচটিএমএল এএফ নেটওয়ার্ডিং ২.০ ব্যবহার করে


205

আমি এএফ নেটওয়ার্কিংয়ের নতুন সংস্করণ ২.০ চেষ্টা করে দেখছি এবং উপরে ত্রুটিটি পাচ্ছি। কোন ধারণা কেন এই ঘটছে? আমার কোডটি এখানে:

    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];

আমি এক্সকোড 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}

আমি কেবল কেজেএসএনলিঙ্ক ব্যবহার করে জেএসএন লুকিয়ে রেখেছি। এটি একটি JSON ফেরত উচিত।

উত্তর:


361

এর অর্থ হ'ল "text/html"ইতিমধ্যে সমর্থিত ধরণের পরিবর্তে আপনার সার্ভার প্রেরণ করছে । আমার সমাধান যোগ করার জন্য ছিল "text/html"থেকে acceptableContentTypesসেট AFURLResponseSerializationবর্গ। কেবল "গ্রহণযোগ্য কনটেন্টটিপস" অনুসন্ধান করুন এবং @"text/html"ম্যানুয়ালি সেটটিতে যুক্ত করুন ।

অবশ্যই, আদর্শ সমাধানটি হ'ল সার্ভার থেকে প্রেরিত ধরণটি পরিবর্তন করা, তবে তার জন্য আপনাকে সার্ভার টিমের সাথে কথা বলতে হবে।


142
ধন্যবাদ! আমি এটিকে কাজটি করার জন্য এই কোডটি কেবল যুক্ত করেছি:op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
জয়ট্রিক্স

13
পিএইচপি-র জন্য এটি পৃষ্ঠায় এটি যোগ করার মতোই সহজ: শিরোনাম ("সামগ্রীর ধরণের: অ্যাপ্লিকেশন / জেসন"); (যদি এটি
কোনও জেএসএন

1
@ ক্রেকেহো এর জন্য ধন্যবাদ - পৃষ্ঠার শিরোনামটি এর চেয়ে বেশি পরিবর্তন করতে পছন্দ করেছেন acceptableContentTypes:)
নিক

43
@Jaytrixz মন্তব্যের একটি বিকল্প শুধু হয় যোগ ইতিমধ্যে বিদ্যমান বেশী করার জন্য একটি নতুন বিষয়বস্তু টাইপ:op.responseSerializer.acceptableContentTypes = [op.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
mgarciaisaia

11
সুইফট কোড:op.responseSerializer.acceptableContentTypes = NSSet(object: "text/html")
হুসাম

178

আমার RequestOperationManagerপ্রতিক্রিয়া সিরিয়ালাইজারটি HTTPResponseSerializerসমস্যাটি স্থির করার জন্য সেট করা হচ্ছে ।

উদ্দেশ্য গ

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

দ্রুতগতি

manager.responseSerializer = AFHTTPResponseSerializer()

এই পরিবর্তনটি করা মানে আমার acceptableContentTypesকরা প্রতিটি অনুরোধের যোগ করার দরকার নেই ।


2
আমি এটি তৈরি করেছি এবং এটি আমার অ্যাপ্লিকেশনটিকে ক্র্যাশ করে। আবার ব্যবহার করে ফিরে AFJSONResponseSerializer
যাচ্ছেন

2
@jaytrixz এটা নির্ভর করে, আপনার সার্ভার সবসময় JSON সঙ্গে জবাব দেয় তাহলে আপনাকে তা সেট করা উচিত responseSerializerকাছে AFJSONResponseSerializer
ডানপে

2
আপনি এখন রেসপন্সবজেক্টটি এনএসডাটা হিসাবে পাবেন এবং সাফল্য ব্লকে জেএসএনকে পার্স করতে হবে।
ক্যামেরন লোয়েল পামার 11

1
কারণ আমি পোড ব্যবহার করছি, সুতরাং এই উপায়টি আরও ভাল।
ইয়ং হো

@ ড্যানপে, উপরের কোডের লাইনটি কীভাবে সুইফটে রূপান্তর করবেন। আমি ম্যানেজার.অনসপনসরিশালাইজার = এএফজেএসএনআরএসপোনসসরিয়ালিজার.সিরিয়ালাইজার () দিয়ে চেষ্টা করেছি কিন্তু কোনও ব্যবহার নেই।
গণেশ গুতুরি

72

আমি @ জয়ত্রিক্সের উত্তর / মন্তব্য আরও একধাপ এগিয়ে নিয়েছি এবং বিদ্যমান ধরণের সেটগুলিতে "পাঠ্য / এইচটিএমএল" যুক্ত করেছি। তারা যখন এটিকে "অ্যাপ্লিকেশন / জসন" বা "পাঠ্য / জসন" এ সার্ভারের পাশে ঠিক করে দেয় তখন আমি দাবি করি যে এটি নির্বিঘ্নে কাজ করবে।

  manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

2
একমত। এই প্রশ্নের স্বীকৃত উত্তরের একটি বিশাল ত্রুটি রয়েছে যে এটি একটি টাইম বোমা তৈরি করে যা ফেটে যাবে যখন সার্ভারের পক্ষটি সঠিক সামগ্রীর প্রকারটি ফিরিয়ে দেওয়ার জন্য স্থির করা হবে।
এরিক গোল্ডবার্গ

এটি তত্ত্বটি সঠিক বলে মনে হচ্ছে তবে বাস্তবে কেউ কি এটি পরীক্ষা করেছে?
মিনিমি

32

সার্ভারের দিকে, আমি যুক্ত করেছি:

header('Content-type: application/json');

আমার .এফপি কোডে এবং এটিও সমস্যার সমাধান করেছে।


3
if(!headers_sent() ) { header('Content-Type: application/json'); } একটি দুর্দান্ত ফিক্স
এলিওট্রক

17

আমি এই সমস্যাটিকে অন্য দৃষ্টিকোণ থেকে সমাধান করি।

আমি মনে করি সার্ভারটি যদি শিরকির সাথে JSON ডেটা প্রেরণ করে Content-Type: text/html। এটির অর্থ এই নয় যে সার্ভার লোকটি আপনাকে কিছু এইচটিএমএল প্রেরণ করার উদ্দেশ্যেছিল তবে দুর্ঘটনাক্রমে জেএসএনে পরিবর্তিত হয়েছিল। এর অর্থ এই নয় যে সার্ভার লোকটি Content-Typeশিরোনাম কী তা নিয়ে কেবল চিন্তা করে না । সুতরাং যদি সার্ভার লোক ক্লায়েন্ট পক্ষ হিসাবে যত্ন না করে তবে আপনি আরও ভালভাবে হেডারটিকে উপেক্ষা করবেন Content-TypeContent-Typeহেডার চেক ইন উপেক্ষা করার জন্যAFNetworking

manager.responseSerializer.acceptableContentTypes = nil;

এইভাবে AFJSONResponseSerializer(ডিফল্ট এক) Content-Typeপ্রতিক্রিয়া শিরোনামে পরীক্ষা না করেই JSON ডেটা সিরিয়ালিয়াল করবে ।


ঠিক সঠিক। সামগ্রীর ধরণের উপেক্ষা করে আমি আমার সামগ্রীটি হেক্স কোড হিসাবে গ্রহণ করি না বা কোনও ব্যর্থ সাড়া হিসাবেও পাই না। এটি দুর্দান্ত কাজ করে! ধন্যবাদ
ব্র্যান্ডন

7

"পাঠ্য / প্লেইন" সামগ্রী প্রকারটি সক্ষম করার একটি সহজ উপায়:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

একইভাবে যদি আপনি "পাঠ্য / এইচটিএমএল" সামগ্রী প্রকারটি সক্ষম করতে চান:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

5

আমি @ এন্ড্রি উত্তর অনুসারে লাইনের নীচে চেষ্টা করেছি কিন্তু কাজ করে নি,

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;

আশা করি এটি কাউকে সাহায্য করবে।


1
+1 টি। এটি অবশ্যই সমাধান। যেহেতু আপনাকে যদি জেএসওএন সিরিয়ালাইজার হয় (যা সাধারণত "অ্যাপ্লিকেশন / জেসসন" ব্যবহার করে) এবং অপারেশন হয় তবে আপনাকে সিরিয়ালেজারে গ্রহণযোগ্য কন্টেন্ট টাইপ উভয়ই সেট করতে হবে। অন্যথায় আপনি কেবল অপারেশনে একটি ত্রুটি সেটিংস পাবেন।
loretoparisi

3

এটিই আমি কাজ করতে পেলাম

-(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);
    }];
}

3

কেউ যদি ব্যবহার করে থাকে AFHTTPSessionManagerতবে সমস্যা সমাধানের জন্য কেউ এর মতো করতে পারে,

আমি AFHTTPSessionManagerযেখানে সাবস্ক্লস করেছিলাম যেখানে আমি এই জাতীয় কাজ করছি,

NSMutableSet *contentTypes = [[NSMutableSet alloc] initWithSet:self.responseSerializer.acceptableContentTypes];
[contentTypes addObject:@"text/html"];
self.responseSerializer.acceptableContentTypes = contentTypes;

2

আমার ক্ষেত্রে, সার্ভার সেটিংয়ের উপরে আমার নিয়ন্ত্রণ নেই, তবে আমি জানি এটি "সামগ্রী / প্রকার" এর জন্য "অ্যাপ্লিকেশন / জেসন" প্রত্যাশা করে। আমি এটি iOS ক্লায়েন্টের পক্ষ থেকে করেছি:

manager.requestSerializer = [AFJSONRequestSerializer serializer];

পড়ুন AFNetworking সংস্করণ 2 সামগ্রী-প্রকার ত্রুটি


1

কেবল এই লাইনটি যুক্ত করুন:

operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

0

আমি একটি সুইফট কোডবেস থেকে এএফ নেটর্কেটিংয়ের সাথে কাজ করার মতোই একরকম সমস্যা ছিলাম তাই আমি কেবল এখানে এটাকে দূরবর্তী ক্ষেত্রে রেখে দিচ্ছি যে আমার মতো একটি সেটআপে কাজ করার মতো কেউ দুর্ভাগ্যজনক। আপনি যদি হন, আমি আপনাকে বন্ধু মনে করি, দৃ stay় থাকুন!

আমাকে প্রশ্নবিদ্ধ বিষয়বস্তুর ধরণের মান acceptableContentTypesসহ আসলে সেট করা সত্ত্বেও "অগ্রহণযোগ্য সামগ্রী-ধরণের" কারণে অপারেশন ব্যর্থ হয়েছিল Set

আমার কাছে সমাধানটি ছিল সুইফট কোডটি আরও উদ্দেশ্যমূলক-সি বান্ধব হওয়ার জন্য টুইঙ্ক করা, আমার ধারণা :

serializer.acceptableContentTypes = NSSet(array: ["application/xml", "text/xml", "text/plain"]) as Set<NSObject>

0

আপনাকে সঠিক উত্তরটি হ্রাস করতে এবং সহায়তা করতে একটি ভাল প্রশ্নের সর্বদা একাধিক উত্তর থাকে, আমি এখানে আমার নিজেরও যুক্ত করছি। আমি এটি পরীক্ষা করেছি এবং এটি ভাল কাজ করে।

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);
}];

-1
 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);
 }];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.