मैं सामग्री-प्रकार शीर्षलेख को एप्लिकेशन/जेसन और शरीर में जेएसओएन के साथ पोस्ट करने के लिए सेट करने के लिए एएफनेटवर्किंग का उपयोग करके एक रास्ता खोजने का प्रयास कर रहा हूं। दस्तावेज़ीकरण में जो विधियां मैं देख रहा हूं (पोस्टपाथ और अनुरोधविथ विधि) दोनों पैरामीटर का एक शब्दकोश लेते हैं, जो मुझे लगता है कि मानक फॉर्म सिंटैक्स में एन्कोड किया गया है। क्या किसी को शरीर के लिए JSON का उपयोग करने के लिए AFHTTPClient को निर्देश देने का तरीका पता है, या क्या मुझे स्वयं अनुरोध लिखने की आवश्यकता है?
2 जवाब
मैंने आगे बढ़कर उनकी मास्टर शाखा से नवीनतम AFNetworking की जाँच की। बॉक्स के बाहर मैं वांछित व्यवहार प्राप्त करने में सक्षम था। मैंने देखा और यह हाल के बदलाव (6 अक्टूबर) की तरह लगता है, इसलिए आपको केवल नवीनतम खींचने की आवश्यकता हो सकती है।
मैंने अनुरोध करने के लिए निम्नलिखित कोड लिखा था:
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];
मेरे प्रॉक्सी के तहत मैं कच्चा अनुरोध देख सकता हूं:
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"}
AFHTTPClient स्रोत से आप देख सकते हैं कि JSON एन्कोडिंग लाइन 170, और लाइन 268।
मेरे लिए, जेसन डिफ़ॉल्ट एन्कोडिंग नहीं था। आप इसे मैन्युअल रूप से इस तरह डिफ़ॉल्ट एन्कोडिंग के रूप में सेट कर सकते हैं:
(इवान के कोड का उपयोग करके)
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];
महत्वपूर्ण हिस्सा:
[client setParameterEncoding:AFJSONParameterEncoding];
[client setParameterEncoding:AFJSONParameterEncoding];
गायब था। लेकिन इसके अलावा ऐसा लगता है कि यह वास्तव में NSDictionary के साथ काम करने के लिए भी आवश्यक है: [client registerHTTPOperationClass:[AFJSONRequestOperation class]];
self.parameterEncoding = AFJSONParameterEncoding;
के साथ मैन्युअल रूप से JSON पर पैरामीटर एन्कोडिंग सेट करें।