2011-05-11 12 views
10

काम नहीं कर रहा है मुझे पैरामीटर के साथ एक HTTP POST अनुरोध बनाने की आवश्यकता है। मुझे पता है कि वहां कई उदाहरण हैं, मैंने HTTPparams, NameValuePair आदि का उपयोग करने का प्रयास किया है लेकिन सर्वर के लिए सही प्रारूप नहीं लग रहा है।एंड्रॉइड: पैरामीटर के साथ एचटीपी पोस्ट

Server Type: REST based API utilizing JSON for data transfer
Content-type: application/json
Accept: application/json
Content-length: 47
{"username":"abcd","password":"1234"}

मैं इन हेडर पारित कर सकते हैं, लेकिन मैं नहीं कर सकते इन पैरामीटर "उपयोगकर्ता नाम", "पासवर्ड" पारित करने के लिए लग रहे हैं। यहाँ मेरी कोड है:

HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); 
    List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
    pairs.add(new BasicNameValuePair("username","abcd")); 
    pairs.add(new BasicNameValuePair("password","1234")); 
    post.setHeader("Content-type", "application/json"); 
    post.setHeader("Accept", "application/json"); 
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,"UTF-8"); 
    post.setEntity(entity); 
    HttpResponse response = client.execute(post); 

मैं डिबग करने की कोशिश की, लेकिन नहीं कर सकते यदि इकाई ठीक से या नहीं जुड़ा हुआ है ... क्या मैं गलत कर रहा हूँ?

अग्रिम में धन्यवाद। माज

उत्तर

15

इस प्रयास करें:

HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); 
    post.setHeader("Content-type", "application/json"); 
    post.setHeader("Accept", "application/json"); 
JSONObject obj = new JSONObject(); 
obj.put("username", "abcd"); 
obj.put("password", "1234"); 
    post.setEntity(new StringEntity(obj.toString(), "UTF-8")); 
    HttpResponse response = client.execute(post); 
+0

मैं बस क्या जरूरत! बहुत बहुत धन्यवाद। :) – Maaz

+3

सही - जोड़ने के लिए, मुझे परिभाषित निरंतर उपयोग करना पसंद है: 'HTTP.UTF_8' –

+0

यह काम क्यों करता है और ओपी का कोड क्यों नहीं करता है? मुझे एक समान समस्या का सामना करना पड़ रहा है लेकिन केवल 10 सर्वरों में से 1 पर। –

1

मैं काफी यकीन नहीं है, आपके वर्णन से, लेकिन यह प्रतीत होता है कि आपके सर्वर उम्मीद डेटा के बजाय JSON सामग्री वस्तु URL में एन्कोडेड जा रहा है। अपनी पोस्ट के शरीर के रूप में कुछ इस तरह भेजें:

{"username":"abcd","password":"1234"} 
+1

धन्यवाद डॉन, फेमिस कोड ठीक काम किया। लेकिन यहां तक ​​कि आपके सुझाव से मुझे सही कोड का नेतृत्व किया होगा :) – Maaz

1
HttpClient client = new DefaultHttpClient(); 
HttpPost post = new HttpPost("http://www.mymi5.net/API/auth/login"); 
List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 

pairs.add(new BasicNameValuePair("username","abcd")); 
pairs.add(new BasicNameValuePair("password","1234")); 

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,HTTP.UTF_8); 
post.setEntity(entity); 
HttpResponse response = client.execute(post); 

सिर्फ इस coz यह मेरे लिए एकदम सही काम करता है जब मैं HTTP पोस्ट करने के लिए कोशिश कर रहा हूँ की कोशिश करो।

+0

धन्यवाद सुमन, मैंने इसे एक चरण में आजमाया लेकिन काम नहीं किया। :( – Maaz

1

यह शायद आपके लिए काम करेगा।

मानते हुए कि आपके पास पहले से ही जेसन ऑब्जेक्ट है।

नोट: (1) सर्वर में आपको utf-8 (डीबी में भी) के रूप में अनुरोध को संभालने की आवश्यकता है।

@SuppressWarnings("unchecked") 
private static HttpResponse executePostRequest(JSONObject jsonData, String url) { 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httpost = new HttpPost(url); 

    try { 
     httpost.setEntity(new ByteArrayEntity(jsonData.toString().getBytes("UTF8"))); 
     httpost.setHeader("Accept", "application/json"); 
     httpost.setHeader("Content-type", "application/json;charset=UTF-8"); 
     httpost.setHeader("Accept-Charset", "utf-8"); 
     HttpResponse httpResponse = httpclient.execute(httpost); 
     return httpResponse; 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

तो ग्राहक में इस तरह सर्वर प्रतिक्रिया संभाल:

String responseBody = EntityUtils 
        .toString(response.getEntity(), "UTF-8"); 
संबंधित मुद्दे