NameValuePair का उपयोग करके POST का उपयोग करके HttpURLConnection में पैरामीटर कैसे जोड़ें


257

मैं POST के साथ करने की कोशिश कर HttpURLConnectionरहा हूं (मुझे इसे इस तरह से उपयोग करने की आवश्यकता नहीं है, उपयोग नहीं कर सकता HttpPost) और मैं उस संबंध में पैरामीटर जोड़ना चाहूंगा जैसे कि

post.setEntity(new UrlEncodedFormEntity(nvp));

कहाँ पे

nvp = new ArrayList<NameValuePair>();

। होने कुछ डेटा में संग्रहित मैं एक तरह से यह कैसे जोड़ने के लिए नहीं मिल सकता है ArrayListमेरी को HttpURLConnectionजो यहाँ है:

HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);

उस अजीब https और http संयोजन का कारण प्रमाण पत्र को सत्यापित न करने की आवश्यकता है । यह एक समस्या नहीं है, हालांकि, यह सर्वर को अच्छी तरह से पोस्ट करता है। लेकिन मुझे तर्कों के साथ पोस्ट करने की आवश्यकता है।

कोई विचार?


डुप्लिकेट अस्वीकरण:

2012 में वापस, मुझे पता नहीं था कि कैसे एक HTTP POST अनुरोध में पैरामीटर डाले गए थे । मैं इस पर लटका हुआ था NameValuePairक्योंकि यह एक ट्यूटोरियल में था। यह प्रश्न एक डुप्लिकेट की तरह लग सकता है, हालांकि, मेरे 2012 के स्वयं ने उस अन्य प्रश्न को पढ़ा और इसका उपयोग नहीं किया गया था NameValuePair। यह वास्तव में, मेरी समस्या का समाधान नहीं था।


2
अगर आपको पोस्टिंग पोस्टर्स की समस्या है तो नीचे दिए गए लिंक आपकी मदद कर सकते हैं। stackoverflow.com/questions/2793150/…
हितेंद्र

1
स्ट्रिंग url = " example.com "; स्ट्रिंग चारसेट = "UTF-8"; स्ट्रिंग param1 = "value1"; स्ट्रिंग param2 = "value2"; // ... स्ट्रिंग क्वेरी = String.format ("param1 =% s & param2 =% s", URLEncoder.encode (param1, charset), URLEncoder.encode (param2, charset)); आप NameValuePair सूची का उपयोग करने के बजाय एक क्वेरी स्ट्रिंग बना सकते हैं।
हितेंद्र

"मुझे इसे इस तरह से उपयोग करने की आवश्यकता है, HttpPost का उपयोग नहीं कर सकते हैं" यही कारण है कि मैंने यह सुझाव दिया है कि मणिकंदन द्वारा पोस्ट किया गया उत्तर ठीक काम करता है।
हितेन्द्र


1
ऐसा इसलिए था क्योंकि यहाँ "कई उत्तर" उस प्रश्न के उत्तर के समान थे। लेकिन अब मैं देख रहा हूं कि यह एक अलग सवाल है, स्पष्टीकरण के लिए धन्यवाद :)
रोगरडैक 25'18

जवाबों:


362

आप कनेक्शन के लिए आउटपुट स्ट्रीम प्राप्त कर सकते हैं और इसके लिए पैरामीटर क्वेरी स्ट्रिंग लिख सकते हैं।

URL url = new URL("http://yoururl.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("firstParam", paramValue1));
params.add(new BasicNameValuePair("secondParam", paramValue2));
params.add(new BasicNameValuePair("thirdParam", paramValue3));

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();

conn.connect();

...

private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (NameValuePair pair : params)
    {
        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
    }

    return result.toString();
}

25
NameValuePair को AbstractMap के SimpleEntry के साथ भी प्रतिस्थापित किया जा सकता है। इस पृष्ठ को देखें: stackoverflow.com/questions/2973041/a-keyvaluepair-in-java

यदि आप अनिश्चित हैं तो यहां आयात किए गए हैं। आयात org.apache.http.NameValuePair; आयात org.apache.http.message.BasicNameValuePair;
वुडन किटी

9
सर्वश्रेष्ठ प्रदर्शन के लिए, आपको या तो setFixedLengthStreamingMode (int) को कॉल करना चाहिए, जब शरीर की लंबाई पहले से ज्ञात हो, या जब यह नहीं है तो setChunkedStreamingMode (int) सेट करें। अन्यथा HttpURLConnection को प्रेषित होने, (और संभवतः थकावट) ढेर और बढ़ती हुई विलंबता को प्रसारित करने से पहले मेमोरी में पूर्ण अनुरोध बॉडी को बफर करने के लिए मजबूर किया जाएगा।
मुहम्मद बाबर

11
NameValuePair Api 22 में पदावनत है, मेरे उत्तर को देखें stackoverflow.com/a/29561084/4552938
फहीम

1
हो सकता है कि आप URL ऑब्जेक्ट का निर्माण करते समय कच्चे मोड का उपयोग कर सकते हैं, कुछ इस तरह: URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");तब जब POST विधि का उपयोग करने के लिए सेट करें उन्हें लिखने की आवश्यकता नहीं है।
अलेक्सांद्र

184

चूंकि NameValuePair पदावनत है। मेरा कोड साझा करने की बात सोची

public String  performPostCall(String requestURL,
            HashMap<String, String> postDataParams) {

        URL url;
        String response = "";
        try {
            url = new URL(requestURL);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);


            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParams));

            writer.flush();
            writer.close();
            os.close();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line=br.readLine()) != null) {
                    response+=line;
                }
            }
            else {
                response="";

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

....

  private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException{
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }

10
तारीख फहीम को :-) यह रखने के लिए धन्यवाद
मीकल

3
यदि आपका compileSdkVersion 23 है (मार्शमैलो) तो आप NameValuePair का उपयोग नहीं कर सकते क्योंकि उन्होंने लाइब्रेरी को हटा दिया था। मुझे डर था कि प्रवास एक दर्द होने वाला था लेकिन आपके समाधान ने मुझे बहुत समय बचा लिया। धन्यवाद।
ChallengeAccepted

यह बहुत अच्छा काम करता है, लेकिन प्रतिक्रिया में दोहरा उद्धरण क्यों होता है, जैसे ""result""?
Apostrofix

1
क्या आप में से किसी को OutputStream os = conn.getOutputStream();होस्टनेम से जुड़े किसी पते के बारे में जेली बीन पर इस लाइन के साथ कोई समस्या नहीं थी?
रिकार्डो

1
अपना कोड साझा करने के लिए धन्यवाद। यहां तक ​​कि एंड्रॉइड डेवलपर वेबसाइट भी समाधान की पेशकश नहीं करती है।
अहसान

153

यदि आपको ArrayList<NameValuePair>मापदंडों की आवश्यकता नहीं है , तो यह एक छोटा समाधान है जो Uri.Builderकक्षा का उपयोग करके क्वेरी स्ट्रिंग बनाता है :

URL url = new URL("http://yoururl.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);

Uri.Builder builder = new Uri.Builder()
        .appendQueryParameter("firstParam", paramValue1)
        .appendQueryParameter("secondParam", paramValue2)
        .appendQueryParameter("thirdParam", paramValue3);
String query = builder.build().getEncodedQuery();

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
            new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();

conn.connect();

7
यह एक उत्तर होना चाहिए, क्योंकि पहिए का फिर से आविष्कार नहीं किया जाना चाहिए!
इंजेक्टर

छवियों और सभी के लिए परिशिष्ट में फ़ाइलबॉडी कैसे अपलोड करें
हर्षा

2
अधिक संतोषजनक समाधान
PYPL

@mpolci, मेरे पास जटिल प्रकार के मापदंडों के संबंध में एक प्रश्न / शंका है। मेरे पास पैरामीटर हैं, और मुझे नहीं पता कि उन मापदंडों को कैसे पारित किया जाए। {"key1": "value1", "key2": "value2", "key3": {"inner key1": "आंतरिक value1", "inner key2": "inner value 2"}}। मुझे इस प्रकार के जटिल कुंजी मान पैरामीटर प्रदान किए गए हैं और मैं जानना चाहता हूं कि मैं वेबसर्विस में इन मापदंडों को कैसे पारित कर सकता हूं?
Krups

1
@ मुझे लगता है कि आपकी समस्या इससे भिन्न है, POST का उपयोग करके JSON ऑब्जेक्ट भेजने की कोशिश करें
mpolci

25

इसका एक उपाय यह है कि आप अपने स्वयं के पैरामस को बना लें।

यह वास्तविक विधि है जो मैं अपने नवीनतम प्रोजेक्ट के लिए उपयोग कर रहा हूं। आपको हैशटेबल से namevaluepair के लिए args बदलने की आवश्यकता है:

private static String getPostParamString(Hashtable<String, String> params) {
    if(params.size() == 0)
        return "";

    StringBuffer buf = new StringBuffer();
    Enumeration<String> keys = params.keys();
    while(keys.hasMoreElements()) {
        buf.append(buf.length() == 0 ? "" : "&");
        String key = keys.nextElement();
        buf.append(key).append("=").append(params.get(key));
    }
    return buf.toString();
}

पोस्टमार्टम पोस्टिंग:

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(getPostParamString(req.getPostParams()));

3
निश्चित रूप से आपको कुंजी-मूल्य जोड़े
मैक्स नानसी

14

मुझे लगता है कि मुझे वही मिला जिसकी आपको आवश्यकता है। यह दूसरों की मदद कर सकता है।

आप UrlEncodedFormEntity.writeTo (OutputStream) विधि का उपयोग कर सकते हैं ।

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvp); 
http.connect();

OutputStream output = null;
try {
  output = http.getOutputStream();    
  formEntity.writeTo(output);
} finally {
 if (output != null) try { output.close(); } catch (IOException ioe) {}
}

14

स्वीकृत उत्तर यहां पर एक प्रोटोकॉल अपवाद को फेंकता है:

OutputStream os = conn.getOutputStream();

क्योंकि यह URLConnection ऑब्जेक्ट के लिए आउटपुट को सक्षम नहीं करता है। समाधान में यह शामिल होना चाहिए:

conn.setDoOutput(true);

यह काम करने के लिए।


13

यदि बहुत देर नहीं हुई है, तो मैं अपना कोड साझा करना चाहूंगा

Utils.java:

public static String buildPostParameters(Object content) {
        String output = null;
        if ((content instanceof String) ||
                (content instanceof JSONObject) ||
                (content instanceof JSONArray)) {
            output = content.toString();
        } else if (content instanceof Map) {
            Uri.Builder builder = new Uri.Builder();
            HashMap hashMap = (HashMap) content;
            if (hashMap != null) {
                Iterator entries = hashMap.entrySet().iterator();
                while (entries.hasNext()) {
                    Map.Entry entry = (Map.Entry) entries.next();
                    builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString());
                    entries.remove(); // avoids a ConcurrentModificationException
                }
                output = builder.build().getEncodedQuery();
            }
        }

        return output;
    }

public static URLConnection makeRequest(String method, String apiAddress, String accessToken, String mimeType, String requestBody) throws IOException {
        URL url = new URL(apiAddress);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(!method.equals("GET"));
        urlConnection.setRequestMethod(method);

        urlConnection.setRequestProperty("Authorization", "Bearer " + accessToken);        

        urlConnection.setRequestProperty("Content-Type", mimeType);
        OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
        writer.write(requestBody);
        writer.flush();
        writer.close();
        outputStream.close();            

        urlConnection.connect();

        return urlConnection;
    }

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new APIRequest().execute();
}

private class APIRequest extends AsyncTask<Void, Void, String> {

        @Override
        protected Object doInBackground(Void... params) {

            // Of course, you should comment the other CASES when testing one CASE

            // CASE 1: For FromBody parameter
            String url = "http://10.0.2.2/api/frombody";
            String requestBody = Utils.buildPostParameters("'FromBody Value'"); // must have '' for FromBody parameter
            HttpURLConnection urlConnection = null;
            try {
                urlConnection = (HttpURLConnection) Utils.makeRequest("POST", url, null, "application/json", requestBody);                    
                InputStream inputStream;
                // get stream
                if (urlConnection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                    inputStream = urlConnection.getInputStream();
                } else {
                    inputStream = urlConnection.getErrorStream();
                }
                // parse stream
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String temp, response = "";
                while ((temp = bufferedReader.readLine()) != null) {
                    response += temp;
                }
                return response;
            } catch (IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }

            // CASE 2: For JSONObject parameter
            String url = "http://10.0.2.2/api/testjsonobject";
            JSONObject jsonBody;
            String requestBody;
            HttpURLConnection urlConnection;
            try {
                jsonBody = new JSONObject();
                jsonBody.put("Title", "BNK Title");
                jsonBody.put("Author", "BNK");
                jsonBody.put("Date", "2015/08/08");
                requestBody = Utils.buildPostParameters(jsonBody);
                urlConnection = (HttpURLConnection) Utils.makeRequest("POST", url, null, "application/json", requestBody);                    
                ...
                // the same logic to case #1
                ...
                return response;
            } catch (JSONException | IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }           

            // CASE 3: For form-urlencoded parameter
            String url = "http://10.0.2.2/api/token";
            HttpURLConnection urlConnection;
            Map<String, String> stringMap = new HashMap<>();
            stringMap.put("grant_type", "password");
            stringMap.put("username", "username");
            stringMap.put("password", "password");
            String requestBody = Utils.buildPostParameters(stringMap);
            try {
                urlConnection = (HttpURLConnection) Utils.makeRequest("POST", url, null, "application/x-www-form-urlencoded", requestBody);
                ...
                // the same logic to case #1
                ...
                return response;
            } catch (Exception e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }                  
        }

        @Override
        protected void onPostExecute(String response) {
            super.onPostExecute(response);
            // do something...
        }
    }

@ श्रीनिवासन जैसा कि आप मेरे कोड में देखते हैं: "if (urlConnection.getResponseCode () == HttpURLConnection.HTTP_OK) {...} बाकी {...}"
BNK

हां, मुझे पहले से ही मिल गया था, लेकिन मैंने जो पूछा वह था कि किस वेरिएबल को दिए गए यूआरएल से पूरी प्रतिक्रिया
मिलेगी

1
@ श्रीनिवासन और अधिक विस्तार से आप इनपुटस्ट्रीम इनपुट की कोशिश कर सकते हैं। if (urlConnection.getResponseCode () == HttpURLConnection.HTTP_OK) {inputStream = urlConnection.getInputStream (); } और {inputStream = urlConnection.getErrorStream (); }
बीएनके

@ श्रीनिवासन वास्तव में, यदि सम्मान कोड <400 (खराब अनुरोध), तो आप getInputStream, if> = 400 का उपयोग करें, getErrorStream
BNK

1
सुपर स्टफ भाई अच्छे उदाहरण
जा रहा है

10

PrintWriter का उपयोग करके बहुत आसान तरीका है ( यहाँ देखें )

मूल रूप से आप सभी की जरूरत है:

// set up URL connection
URL urlToRequest = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection)urlToRequest.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// write out form parameters
String postParamaters = "param1=value1&param2=value2"
urlConnection.setFixedLengthStreamingMode(postParameters.getBytes().length);
PrintWriter out = new PrintWriter(urlConnection.getOutputStream());
out.print(postParameters);
out.close();

// connect
urlConnection.connect();

4

AsyncTaskविधि के JSONObectमाध्यम से डेटा भेजने के लिएPOST

public class PostMethodDemo extends AsyncTask<String , Void ,String> {
        String server_response;

        @Override
        protected String doInBackground(String... strings) {
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(strings[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setDoOutput(true);
                urlConnection.setDoInput(true);
                urlConnection.setRequestMethod("POST");

                DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream ());

                try {
                    JSONObject obj = new JSONObject();
                    obj.put("key1" , "value1");
                    obj.put("key2" , "value2");

                    wr.writeBytes(obj.toString());
                    Log.e("JSON Input", obj.toString());
                    wr.flush();
                    wr.close();
                } catch (JSONException ex) {
                    ex.printStackTrace();
                }
                urlConnection.connect();

                int responseCode = urlConnection.getResponseCode();

                if(responseCode == HttpURLConnection.HTTP_OK){
                    server_response = readStream(urlConnection.getInputStream());
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.e("Response", "" + server_response);
        }
    }

    public static String readStream(InputStream in) {
        BufferedReader reader = null;
        StringBuffer response = new StringBuffer();
        try {
            reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return response.toString();
    }

3

इसे इस्तेमाल करे:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("your url");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("user_name", "Name"));
nameValuePairs.add(new BasicNameValuePair("pass","Password" ));
nameValuePairs.add(new BasicNameValuePair("user_email","email" ));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

String ret = EntityUtils.toString(response.getEntity());
Log.v("Util response", ret);

आप nameValuePairsजितने की जरूरत है उतना जोड़ सकते हैं । और सूची में गिनती का उल्लेख करना न भूलें।


इस लिंक को देखें। xyzws.com/Javafaq/…
मणिकंदन

1
यह शीर्षक वाले प्रश्न का उत्तर नहीं देता है How to add parameters to HttpURLConnection using POST- यह गुमराह करता है।
उपयोगकर्ता 3

2
यह इस प्रश्न का उचित उत्तर नहीं है।
स्काईनेट

1
NameValuePair Api 22 में पदावनत है, मेरे उत्तर को देखें stackoverflow.com/a/29561084/4552938
फहीम

2

कस्टम हेडर या जसन डेटा के साथ POST / PUT / DELETE / GET बाकी तरीकों को कॉल करने के लिए निम्नलिखित Async क्लास का उपयोग किया जा सकता है

public class HttpUrlConnectionUtlity extends AsyncTask<Integer, Void, String> {
private static final String TAG = "HttpUrlConnectionUtlity";
Context mContext;
public static final int GET_METHOD = 0,
        POST_METHOD = 1,
        PUT_METHOD = 2,
        HEAD_METHOD = 3,
        DELETE_METHOD = 4,
        TRACE_METHOD = 5,
        OPTIONS_METHOD = 6;
HashMap<String, String> headerMap;

String entityString;
String url;
int requestType = -1;
final String timeOut = "TIMED_OUT";

int TIME_OUT = 60 * 1000;

public HttpUrlConnectionUtlity (Context mContext) {
    this.mContext = mContext;
    this.callback = callback;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected String doInBackground(Integer... params) {
    int requestType = getRequestType();
    String response = "";
    try {


        URL url = getUrl();
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection = setRequestMethod(urlConnection, requestType);
        urlConnection.setConnectTimeout(TIME_OUT);
        urlConnection.setReadTimeout(TIME_OUT);
        urlConnection.setDoOutput(true);
        urlConnection = setHeaderData(urlConnection);
        urlConnection = setEntity(urlConnection);

        if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            response = readResponseStream(urlConnection.getInputStream());
            Logger.v(TAG, response);
        }
        urlConnection.disconnect();
        return response;


    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (SocketTimeoutException e) {
        return timeOut;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        Logger.e(TAG, "ALREADY CONNECTED");
    }
    return response;
}

@Override
protected void onPostExecute(String response) {
    super.onPostExecute(response);

    if (TextUtils.isEmpty(response)) {
        //empty response
    } else if (response != null && response.equals(timeOut)) {
        //request timed out 
    } else    {
    //process your response
   }
}


private String getEntityString() {
    return entityString;
}

public void setEntityString(String s) {
    this.entityString = s;
}

private String readResponseStream(InputStream in) {
    BufferedReader reader = null;
    StringBuffer response = new StringBuffer();
    try {
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return response.toString();
}

private HttpURLConnection setEntity(HttpURLConnection urlConnection) throws IOException {
    if (getEntityString() != null) {
        OutputStream outputStream = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(getEntityString());
        writer.flush();
        writer.close();
        outputStream.close();
    } else {
        Logger.w(TAG, "NO ENTITY DATA TO APPEND ||NO ENTITY DATA TO APPEND ||NO ENTITY DATA TO APPEND");
    }
    return urlConnection;
}

private HttpURLConnection setHeaderData(HttpURLConnection urlConnection) throws UnsupportedEncodingException {
    urlConnection.setRequestProperty("Content-Type", "application/json");
    urlConnection.setRequestProperty("Accept", "application/json");
    if (getHeaderMap() != null) {
        for (Map.Entry<String, String> entry : getHeaderMap().entrySet()) {
            urlConnection.setRequestProperty(entry.getKey(), entry.getValue());
        }
    } else {
        Logger.w(TAG, "NO HEADER DATA TO APPEND ||NO HEADER DATA TO APPEND ||NO HEADER DATA TO APPEND");
    }
    return urlConnection;
}

private HttpURLConnection setRequestMethod(HttpURLConnection urlConnection, int requestMethod) {
    try {
        switch (requestMethod) {
            case GET_METHOD:
                urlConnection.setRequestMethod("GET");
                break;
            case POST_METHOD:
                urlConnection.setRequestMethod("POST");
                break;
            case PUT_METHOD:
                urlConnection.setRequestMethod("PUT");
                break;
            case DELETE_METHOD:
                urlConnection.setRequestMethod("DELETE");
                break;
            case OPTIONS_METHOD:
                urlConnection.setRequestMethod("OPTIONS");
                break;
            case HEAD_METHOD:
                urlConnection.setRequestMethod("HEAD");
                break;
            case TRACE_METHOD:
                urlConnection.setRequestMethod("TRACE");
                break;
        }
    } catch (ProtocolException e) {
        e.printStackTrace();
    }
    return urlConnection;
}

public int getRequestType() {
    return requestType;
}

public void setRequestType(int requestType) {
    this.requestType = requestType;
}

public URL getUrl() throws MalformedURLException {
    return new URL(url);
}

public void setUrl(String url) {
    this.url = url;
}

public HashMap<String, String> getHeaderMap() {
    return headerMap;
}

public void setHeaderMap(HashMap<String, String> headerMap) {
    this.headerMap = headerMap;
}   }

और उपयोग है

    HttpUrlConnectionUtlity httpMethod = new HttpUrlConnectionUtlity (mContext);
    JSONObject jsonEntity = new JSONObject();

    try {
        jsonEntity.put("key1", value1);
        jsonEntity.put("key2", value2);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    httpMethod.setUrl(YOUR_URL_STRING);
    HashMap<String, String> headerMap = new HashMap<>();
    headerMap.put("key",value);
    headerMap.put("key1",value1);
    httpMethod.setHeaderMap(headerMap);
    httpMethod.setRequestType(WiseConnectHttpMethod.POST_METHOD); //specify POST/GET/DELETE/PUT
    httpMethod.setEntityString(jsonEntity.toString());
    httpMethod.execute();

1

Org.apache.http.client.HttpClient का उपयोग करके भी आप आसानी से नीचे दिए गए अधिक पठनीय तरीके से कर सकते हैं।

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

पकड़ने की कोशिश के भीतर आप सम्मिलित कर सकते हैं

// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

1
प्रतिक्रिया के लिए धन्यवाद! मैं इसे इस तरह से उपयोग नहीं कर सकता (प्रश्न में कहा गया है, पहली पंक्ति)।
मीकल

7
यह इस प्रश्न का उचित उत्तर नहीं है।
स्काईनेट

3
NameValuePair Api 22 में पदावनत है, मेरे उत्तर को देखें stackoverflow.com/a/29561084/4552938
फहीम

1
यहाँ तक कि HTTP मुवक्किल को भी 23 में हटा दिया गया और हटा दिया गया
RevanthKrishnaKumar V.

0

मेरे मामले में मैंने पोस्ट अनुरोध करने के लिए इस तरह का फ़ंक्शन बनाया है जो स्ट्रिंग यूआरएल और मापदंडों के हैशमप लेता है

 public  String postRequest( String mainUrl,HashMap<String,String> parameterList)
{
    String response="";
    try {
        URL url = new URL(mainUrl);

        StringBuilder postData = new StringBuilder();
        for (Map.Entry<String, String> param : parameterList.entrySet())
        {
            if (postData.length() != 0) postData.append('&');
            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }

        byte[] postDataBytes = postData.toString().getBytes("UTF-8");




        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

        StringBuilder sb = new StringBuilder();
        for (int c; (c = in.read()) >= 0; )
            sb.append((char) c);
        response = sb.toString();


    return  response;
    }catch (Exception excep){
        excep.printStackTrace();}
    return response;
}

0

मैं कुछ इस तरह का उपयोग करें:

SchemeRegistry sR = new SchemeRegistry();
sR.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));

HttpParams params = new BasicHttpParams();
SingleClientConnManager mgr = new SingleClientConnManager(params, sR);

HttpClient httpclient = new DefaultHttpClient(mgr, params);

HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);

-1
JSONObject params = new JSONObject();
try {
   params.put(key, val);
}catch (JSONException e){
   e.printStackTrace();
}

इस तरह मैं पोस्ट के माध्यम से "परम" (JSONObject) पास करता हूं

connection.getOutputStream().write(params.toString().getBytes("UTF-8"));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.