নামভ্যালিউপায়ার ব্যবহার করে পোষ্ট ব্যবহার করে এইচটিটিপিআরএল সংযোগে প্যারামিটারগুলি কীভাবে যুক্ত করা যায়


257

আমি কি করতে চেষ্টা করছি পোষ্ট দিয়ে HttpURLConnection(আমি প্রয়োজন এই ভাবে ব্যবহার করতে ব্যবহার করতে পারবেন না HttpPost) এবং আমি যেমন যে সংযোগ পরামিতি যোগ করতে চান

post.setEntity(new UrlEncodedFormEntity(nvp));

কোথায়

nvp = new ArrayList<NameValuePair>();

কিছু তথ্য সঞ্চিত আছে here 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 সংমিশ্রনের কারণ হ'ল শংসাপত্রটি যাচাই না করা। এটি কোনও সমস্যা নয়, যদিও এটি সার্ভারটি ভাল পোস্ট করে। তবে আমার পক্ষে যুক্তি সহ পোস্ট করা দরকার।

কোন ধারনা?


সদৃশ অস্বীকৃতি:

২০১২ সালে ফিরে, আমার কোনও ধারণা ছিল না কীভাবে এইচটিটিপি পোস্টের অনুরোধে প্যারামিটারগুলি serted োকানো হয়েছিল। আমি ঝুলছিলাম NameValuePairকারণ এটি টিউটোরিয়ালে ছিল। এই প্রশ্নটি সদৃশ বলে মনে হতে পারে, তবে আমার 2012 টি নিজেই অন্য প্রশ্নটি পড়েছে এবং এটি ব্যবহার করছে নাNameValuePair । এটি আসলে আমার সমস্যার সমাধান করেনি।


2
আপনার যদি প্যারামগুলি পোস্ট করতে সমস্যা হয় তবে নীচের লিঙ্কটি আপনাকে সহায়তা করতে পারে। stackoverflow.com/questions/2793150/...
Hitendra

1
স্ট্রিং url = " উদাহরণ . com "; স্ট্রিং চরসেট = "ইউটিএফ -8"; স্ট্রিং প্যারাম 1 = "মান 1"; স্ট্রিং প্যারাম 2 = "মান 2"; // ... স্ট্রিং ক্যোয়ারী = স্ট্রিং.উফর্ম্যাট ("প্যারাম 1 =% এস & প্যারাম 2% আপনি নেমভেলিউয়ার যুক্ত তালিকা ব্যবহার না করে কোয়েরি স্ট্রিং তৈরি করতে পারেন।
হিতেন্দ্র

"আমাকে এটি এইভাবে ব্যবহার করা দরকার, এইচটিপিপোস্ট ব্যবহার করতে পারি না" এজন্যই আমি মণিকান্দন পোস্ট করা উত্তরটি ঠিকঠাক কাজ করার পরামর্শ দিয়েছি।
হিতেন্দ্র


1
কারণ এখানে "অনেক উত্তর" সেই প্রশ্নের উত্তর হিসাবে একই ছিল। তবে এখন আমি দেখতে পাচ্ছি যে এটি একটি আলাদা প্রশ্ন, স্পষ্টতার জন্য ধন্যবাদ :)
রজারডপ্যাক

উত্তর:


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
নেমভ্যালু পেয়ারটি অ্যাবস্ট্রাকম্যাপের সিম্পল এন্ট্রিতেও প্রতিস্থাপিত হতে পারে। : এই পৃষ্ঠা দেখুন stackoverflow.com/questions/2973041/a-keyvaluepair-in-java

আপনি যদি অনিশ্চিত হন তবে আমদানিগুলি এখানে। org.apache.http.NameValuePair আমদানি করুন; org.apache.http.message.BasicNameValuePair আমদানি করুন;
উডেনকিটি

9
সর্বোত্তম পারফরম্যান্সের জন্য, আপনার শরীরের দৈর্ঘ্য আগে থেকেই জানা থাকলে সেটফিক্সডলিংথস্ট্রিমিংমড (ইনট) বা কল-স্ট্রিংমিং (ইনট) না করা উচিত। অন্যথায় এইচটিপিআরএল সংযোগটি সঞ্চারিত হওয়ার আগে, এবং অপচয় (এবং সম্ভবত ক্লান্তিকর) হিপ এবং ক্রমবর্ধমান বিলম্বের আগে সম্পূর্ণ অনুরোধের বডিটি মেমরিতে সম্পূর্ণভাবে বাফার করতে বাধ্য করা হবে।
মুহাম্মদ বাবর

11
নেমভ্যালিউপায়ারটি এপি 22 এ অবহিত হয়েছে, আমার উত্তরটি দেখুন stackoverflow.com/a/29561084/4552938
ফাহিম

1
ইউআরএল অবজেক্ট তৈরি করার সময় আপনি কাঁচা মোড ব্যবহার করতে পারেন, এর মতো কিছু: URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");তারপরে POST পদ্ধতিটি ব্যবহার করার জন্য সেট হয়ে গেলে সেগুলি লেখার প্রয়োজন হয় না।
alexscmar

184

যেহেতু নামভ্যালিউপায়ার অবনতিহীন। আমার কোড ভাগ করে নেওয়ার কথা ভেবেছি

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
যদি আপনার সংকলনএসডিপি ভার্সনটি 23 (মার্শমেলো) হয় তবে আপনি আর নেমভেলিউয়ারটি ব্যবহার করতে পারবেন না কারণ তারা গ্রন্থাগারটি সরিয়ে দিয়েছে। আমি আশঙ্কা করছিলাম যে মাইগ্রেশন একটি ব্যথা হতে চলেছে তবে আপনার সমাধানটি আমাকে অনেক সময় বাঁচিয়েছিল। ধন্যবাদ.
চ্যালেঞ্জএপ্টেম্বর

এটি দুর্দান্ত কাজ করে তবে প্রতিক্রিয়াটির কেন ডাবল কোট রয়েছে ""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
আরও সন্তোষজনক সমাধান
পিওয়াইপিএল

@ এমপলসি, জটিল ধরণের পরামিতিগুলির বিষয়ে আমার একটি প্রশ্ন / সন্দেহ আছে। আমার পরামিতি রয়েছে এবং আমি জানি না যে কীভাবে এই পরামিতিগুলি পাস করতে হবে। } "কী 1": "মান 1", "কী 2": "মান 2", "কী 3": inner "অভ্যন্তরীণ কী 1": "অভ্যন্তরীণ মান 1", "অভ্যন্তরীণ কী 2": "অভ্যন্তরীণ মান 2"}}} আমাকে এই জাতীয় জটিল মূল মানগুলির পরামিতি সরবরাহ করা হয়েছে এবং আমি জানতে চাই যে আমি কীভাবে এই ওয়েবসেসিমে এই পরামিতিগুলি পাস করতে পারি?
Krups

1
@ ক্রুপস আমি মনে করি আপনার সমস্যাটি এর থেকে পৃথক, পোষ্ট ব্যবহার করে JSON অবজেক্ট পাঠানোর চেষ্টা করার চেষ্টা করুন
এমপলসি

25

একটি সমাধান হ'ল আপনার নিজের প্যারামগুলিকে স্ট্রিং তৈরি করা।

এটিই আমার আসল পদ্ধতিটি আমি আমার সর্বশেষ প্রকল্পের জন্য ব্যবহার করছি। আপনাকে আরশগুলি হ্যাশটেবল থেকে নামওয়ালুইপায়ারগুলিতে পরিবর্তন করতে হবে:

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 (আউটপুট স্ট্রিম) পদ্ধতিটি ব্যবহার করতে পারেন ।

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();

কারণ এটি ইউআরএল সংযোগ অবজেক্টের আউটপুট সক্ষম করে না। সমাধানটি অন্তর্ভুক্ত করা উচিত:

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...
        }
    }

@ শ্রীনিবাসান আপনি আমার কোডটিতে যেমন দেখতে পান: "যদি (urlConnication.getResponseCode () == HttpURLConnication.HTTP_OK) {...} অন্য {...}"
বিএনপিকে

ইয়া আমি ইতিমধ্যে এটি পেয়েছি তবে যা আমি জিজ্ঞাসা করেছি তা প্রদত্ত ইউআরএল থেকে কোন পরিবর্তনশীলটির পুরো প্রতিক্রিয়া হবে
iSrinivasan27

1
@ শ্রীনিবাস আরও বিস্তারিত আপনি ইনপুট স্ট্রিম ইনপুটস্ট্রিম চেষ্টা করতে পারেন = নাল; if (urlConnection.getResponseCode () == HttpURLConnection.HTTP_OK) {ইনপুটস্ট্রিম = urlConnection.getInputStream (); } অন্য {ইনপুটস্ট্রিম = urlConnication.getErrorStream (); }
বিএনকে

@ শ্রীনিবাসন আসলে, যদি রেফারেন্স কোড <400 (খারাপ অনুরোধ) হয় তবে আপনি getInputStream ব্যবহার করেন, যদি> = 400, getErrorStream
BNK

1
সুপার স্টাফ ভাই উত্তম উদাহরণ
কি হচ্ছে!

10

প্রিন্ট রাইটার ব্যবহার করে অনেক সহজ পদ্ধতি রয়েছে ( এখানে দেখুন )

মূলত আপনার যা প্রয়োজন তা হ'ল:

// 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/...
Manikandan

1
এটি শিরোনামের প্রশ্নের উত্তর দেয় না How to add parameters to HttpURLConnection using POST- এটি বিভ্রান্ত করে।
ব্যবহারকারী 3

2
এটি এই প্রশ্নের উপযুক্ত উত্তর নয়।
স্কাইনেট

1
নেমভ্যালিউপায়ারটিকে এপিআই 22-এ অবমুক্ত করা হয়েছে, আমার উত্তরটি দেখুন stackoverflow.com/a/29561084/4552938
ফাহিম

2

কাস্টম শিরোনাম বা জসন ডেটা সহ পোষ্ট / পুট / ডিলেট / ডিলেট / জিইটি বিশ্রামের পদ্ধতিগুলি কল করতে নিম্নলিখিত অ্যাসিঙ্ক ক্লাসটি ব্যবহার করা যেতে পারে

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
নেমভ্যালিউপায়ারটিকে এপিআই 22-এ অবমুক্ত করা হয়েছে, আমার উত্তরটি দেখুন stackoverflow.com/a/29561084/4552938
ফাহিম

1
এমনকি এইচটিটিপি ক্লায়েন্টও
এপ্রি

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"));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.