मैं सामग्री-प्रकार शीर्षलेख को एप्लिकेशन/जेसन और शरीर में जेएसओएन के साथ पोस्ट करने के लिए सेट करने के लिए एएफनेटवर्किंग का उपयोग करके एक रास्ता खोजने का प्रयास कर रहा हूं। दस्तावेज़ीकरण में जो विधियां मैं देख रहा हूं (पोस्टपाथ और अनुरोधविथ विधि) दोनों पैरामीटर का एक शब्दकोश लेते हैं, जो मुझे लगता है कि मानक फॉर्म सिंटैक्स में एन्कोड किया गया है। क्या किसी को शरीर के लिए JSON का उपयोग करने के लिए AFHTTPClient को निर्देश देने का तरीका पता है, या क्या मुझे स्वयं अनुरोध लिखने की आवश्यकता है?

16
Eric Andres 30 अक्टूबर 2011, 07:09

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

23
Evan 30 अक्टूबर 2011, 13:43
11
हुह, मुझे नहीं पता था कि JSON को डिफ़ॉल्ट एन्कोडिंग के रूप में सेट किया गया था। यह एक गलती है (यूआरएल फॉर्म एन्कोडिंग हमेशा डिफ़ॉल्ट होने का मेरा इरादा रहा है; मुझे यकीन नहीं है कि यह कैसे फिसल गया)। @EricAndres: कृपया इसे नोट करें, और अपने कोड में self.parameterEncoding = AFJSONParameterEncoding; के साथ मैन्युअल रूप से JSON पर पैरामीटर एन्कोडिंग सेट करें।
 – 
mattt
31 अक्टूबर 2011, 20:14
बढ़िया, प्रतिक्रिया के लिए धन्यवाद। मौका मिलने पर मैं बाद में self.parameterEncoding सेटिंग करने की कोशिश करूँगा।
 – 
Eric Andres
31 अक्टूबर 2011, 21:20
हम्म ... जेसन डिफ़ॉल्ट एन्कोडिंग नहीं था, लेकिन एनवीपी था (2013 की शुरुआत में)
 – 
stackOverFlew
17 मार्च 2013, 11:00

मेरे लिए, जेसन डिफ़ॉल्ट एन्कोडिंग नहीं था। आप इसे मैन्युअल रूप से इस तरह डिफ़ॉल्ट एन्कोडिंग के रूप में सेट कर सकते हैं:

(इवान के कोड का उपयोग करके)

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];
13
stackOverFlew 17 मार्च 2013, 10:59
1
बहुत - बहुत धन्यवाद! आप सही थे, [client setParameterEncoding:AFJSONParameterEncoding]; गायब था। लेकिन इसके अलावा ऐसा लगता है कि यह वास्तव में NSDictionary के साथ काम करने के लिए भी आवश्यक है: [client registerHTTPOperationClass:[AFJSONRequestOperation class]];
 – 
thedp
10 जिंदा 2014, 18:20
बहुत - बहुत धन्यवाद। तुम मेरा दिन बचाओ !!
 – 
kb920
3 सितंबर 2016, 15:24