2011-10-30 21 views
16

का उपयोग कर रहा AFNetworking का उपयोग कर, एक तरह से खोजने की कोशिश कर रहा हूँ, आवेदन/json होने के लिए Content-Type हैडर स्थापित करने के लिए और शरीर में JSON के साथ पोस्ट करने के लिए एक पोस्ट अनुरोध के शरीर के रूप में। प्रलेखन में जो विधियां मैं देख रहा हूं (पोस्टपैथ और अनुरोध WithMethod) दोनों पैरामीटर का एक शब्दकोश लेते हैं, जो मुझे लगता है कि मानक रूप वाक्यविन्यास में एन्कोड किया गया है। क्या किसी को शरीर के लिए JSON का उपयोग करने के लिए AFHTTPClient को निर्देश देने के तरीके के बारे में पता है, या क्या मुझे अपने अनुरोध को लिखने की आवश्यकता है?पोस्ट करना JSON AFHTTPClient

उत्तर

23

मैं आगे चला गया और उनके master branch से नवीनतम 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 एन्कोडिंग है

मैं अनुरोध करने के लिए निम्न कोड लिखा था डिफ़ॉल्ट line 170, और line 268 पर आधारित है।

+11

हुह, मुझे नहीं पता था JSON होने के लिए स्थापित किया गया था डिफ़ॉल्ट एन्कोडिंग। यह एक गलती है (यूआरएल फॉर्म एन्कोडिंग हमेशा डिफ़ॉल्ट होने का मेरा इरादा रहा है; मुझे यकीन नहीं है कि यह कैसे फिसल गया)। @EricAndres: कृपया इसे नोट करें, और अपने कोड में 'self.parameterEncoding = AFJSONParameterEncoding;' के साथ मैन्युअल रूप से JSON पर पैरामीटर एन्कोडिंग सेट करें। – mattt

+0

बहुत बढ़िया, प्रतिक्रिया के लिए धन्यवाद। जब मैं मौका मिलता हूं तो मैं सेटिंग self.parameter एन्कोडिंग को आजमाउंगा। –

+0

हम्म ... जेसन डिफ़ॉल्ट एन्कोडिंग नहीं था, लेकिन एनवीपी (2013 की शुरुआत में) – stackOverFlew

13

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

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

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

आपको बहुत बहुत धन्यवाद! आप सही थे, '[क्लाइंट सेट पैरामीटर एन्कोडिंग: AFJSON पैरामीटर एन्कोडिंग];' गायब था। लेकिन इसके अलावा में ऐसा लगता है कि यह भी के लिए यह वास्तव में NSDictionary के साथ काम की जरूरत है: '[ग्राहक registerHTTPOperationClass: [AFJSONRequestOperation वर्ग]];' – thedp

+0

बहुत बहुत शुक्रिया। तुम मेरा दिन बचाओ !! – kb920

संबंधित मुद्दे