java PHP में डेटा भेजने के लिए मुझे Android में HttpClient के लिए एक वैकल्पिक विकल्प की आवश्यकता है क्योंकि यह अब समर्थित नहीं है




api http-post (8)

वर्तमान में मैं Android app से अपने PHP server डेटा भेजने के लिए HttpClient PHP server , HttpClient का उपयोग कर रहा हूं लेकिन उन सभी विधियों को एपीआई 22 में हटा दिया गया था और एपीआई 23 में हटा दिया गया था, तो इसके वैकल्पिक विकल्प क्या हैं?

मैंने हर जगह खोज की लेकिन मुझे कुछ भी नहीं मिला।


यदि एपीआई 22 और पुराने के लिए लक्षित है, तो निम्न पंक्ति को build.gradle में जोड़ना चाहिए

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

यदि एपीआई 23 और उसके बाद के लिए लक्षित है, तो निम्न पंक्ति को build.gradle में जोड़ना चाहिए

dependencies {
    compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}

यदि अभी भी एंड्रॉइड मार्शमलो (एसडीके 23) में httpclient लाइब्रेरी का उपयोग करना चाहते हैं, तो आप जोड़ सकते हैं:

useLibrary 'org.apache.http.legacy'

एक वर्कअराउंड के रूप में एंड्रॉइड {} अनुभाग में build.gradle बनाने के लिए। ऐसा लगता है कि Google के कुछ जीएमएस पुस्तकालयों के लिए यह आवश्यक है!


आप HttpClient का उपयोग जारी रखने के लिए स्वतंत्र हैं। Google ने अपाचे के घटकों के अपने संस्करण को केवल बहिष्कृत कर दिया। आप इस पोस्ट में वर्णित अपाचे के एचटीपी क्लाइंट के ताजा, शक्तिशाली और गैर बहिष्कृत संस्करण को इंस्टॉल कर सकते हैं: https://.com/a/37623038/1727132


मुझे यह हल करने के लिए भी इस समस्या का सामना करना पड़ा है कि मैंने अपनी कक्षा बनाई है। जो java.net पर आधारित है, और एंड्रॉइड के एपीआई 24 तक समर्थन करता है कृपया इसे जांचें: HttpRequest.java

इस वर्ग का उपयोग करके आप आसानी से कर सकते हैं:

  1. एचटीपी अनुरोध भेजें
  2. एचटीपी POST अनुरोध भेजें
  3. अनुरोध PUT अनुरोध भेजें
  4. एचटीपी DELETE
  5. अतिरिक्त डेटा पैरा के बिना अनुरोध भेजें और प्रतिक्रिया HTTP status code जांच करें
  6. अनुरोध करने के लिए कस्टम HTTP Headers जोड़ें (varargs का उपयोग करके)
  7. अनुरोध करने के लिए String क्वेरी के रूप में डेटा पैरा जोड़ें
  8. डेटा पैरा को HashMap {key = value} के रूप में जोड़ें
  9. String रूप में प्रतिक्रिया स्वीकार करें
  10. JSONObject रूप में प्रतिक्रिया स्वीकार करें
  11. byte [] रूप में प्रतिक्रिया स्वीकार करें byte [] बाइट्स के ऐरे (फाइलों के लिए उपयोगी)

और उनमें से कोई भी संयोजन - कोड की एक पंक्ति के साथ)

कुछ उदाहरण निम्नलिखित हैं:

//Consider next request: 
HttpRequest req=new HttpRequest("http://host:port/path");

उदाहरण 1 :

//prepare Http Post request and send to "http://host:port/path" with data params name=Bubu and age=29, return true - if worked
req.prepare(HttpRequest.Method.POST).withData("name=Bubu&age=29").send();

उदाहरण 2 :

// prepare http get request,  send to "http://host:port/path" and read server's response as String 
req.prepare().sendAndReadString();

उदाहरण 3 :

// prepare Http Post request and send to "http://host:port/path" with data params name=Bubu and age=29 and read server's response as JSONObject 
HashMap<String, String>params=new HashMap<>();
params.put("name", "Groot"); 
params.put("age", "29");
req.prepare(HttpRequest.Method.POST).withData(params).sendAndReadJSON();

उदाहरण 4 :

//send Http Post request to "http://url.com/b.c" in background  using AsyncTask
new AsyncTask<Void, Void, String>(){
        protected String doInBackground(Void[] params) {
            String response="";
            try {
                response=new HttpRequest("http://url.com/b.c").prepare(HttpRequest.Method.POST).sendAndReadString();
            } catch (Exception e) {
                response=e.getMessage();
            }
            return response;
        }
        protected void onPostExecute(String result) {
            //do something with response
        }
    }.execute(); 

उदाहरण 5 :

//Send Http PUT request to: "http://some.url" with request header:
String json="{\"name\":\"Deadpool\",\"age\":40}";//JSON that we need to send
String url="http://some.url";//URL address where we need to send it 
HttpRequest req=new HttpRequest(url);//HttpRequest to url: "http://some.url"
req.withHeaders("Content-Type: application/json");//add request header: "Content-Type: application/json"
req.prepare(HttpRequest.Method.PUT);//Set HttpRequest method as PUT
req.withData(json);//Add json data to request body
JSONObject res=req.sendAndReadJSON();//Accept response as JSONObject

उदाहरण 6 :

//Equivalent to previous example, but in a shorter way (using methods chaining):
String json="{\"name\":\"Deadpool\",\"age\":40}";//JSON that we need to send
String url="http://some.url";//URL address where we need to send it 
//Shortcut for example 5 complex request sending & reading response in one (chained) line
JSONObject res=new HttpRequest(url).withHeaders("Content-Type: application/json").prepare(HttpRequest.Method.PUT).withData(json).sendAndReadJSON();

उदाहरण 7 :

//Downloading file
byte [] file = new HttpRequest("http://some.file.url").prepare().sendAndReadBytes();
FileOutputStream fos = new FileOutputStream("smile.png");
fos.write(file);
fos.close();

यह वह समाधान है जिसे मैंने समस्या पर लागू किया है कि httpclient एंड्रॉइड 22` के इस संस्करण में बहिष्कृत है

 public static final String USER_AGENT = "Mozilla/5.0";



public static String sendPost(String _url,Map<String,String> parameter)  {
    StringBuilder params=new StringBuilder("");
    String result="";
    try {
    for(String s:parameter.keySet()){
        params.append("&"+s+"=");

            params.append(URLEncoder.encode(parameter.get(s),"UTF-8"));
    }


    String url =_url;
    URL obj = new URL(_url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "UTF-8");

    con.setDoOutput(true);
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
    outputStreamWriter.write(params.toString());
    outputStreamWriter.flush();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + params);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine + "\n");
    }
    in.close();

        result = response.toString();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }catch (Exception e) {
        e.printStackTrace();
    }finally {
    return  result;
    }

}

निम्न कोड एक AsyncTask में है:

मेरी पृष्ठभूमि प्रक्रिया में:

String POST_PARAMS = "param1=" + params[0] + "&param2=" + params[1];
URL obj = null;
HttpURLConnection con = null;
try {
    obj = new URL(Config.YOUR_SERVER_URL);
    con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");

    // For POST only - BEGIN
    con.setDoOutput(true);
    OutputStream os = con.getOutputStream();
    os.write(POST_PARAMS.getBytes()); 
    os.flush();
    os.close();
    // For POST only - END

    int responseCode = con.getResponseCode();
    Log.i(TAG, "POST Response Code :: " + responseCode);

    if (responseCode == HttpURLConnection.HTTP_OK) { //success
         BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
         String inputLine;
         StringBuffer response = new StringBuffer();

         while ((inputLine = in.readLine()) != null) {
              response.append(inputLine);
         }
         in.close();

         // print result
            Log.i(TAG, response.toString());
            } else {
            Log.i(TAG, "POST request did not work.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

संदर्भ: http://www.journaldev.com/7148/java-httpurlconnection-example-to-send-http-getpost-requests


मुझे HttpClent और HttpPost विधि का उपयोग करने में समान समस्याएं थीं क्योंकि मैं अपना कोड बदलना नहीं चाहता था इसलिए मुझे BuildToolsVersion "23.0.1 आरसी 3" से 'आरसी 3' को हटाकर build.gradle (मॉड्यूल) फ़ाइल में वैकल्पिक विकल्प मिला और यह मेरे लिए काम करता है । उम्मीद है की वो मदद करदे।


HttpClient दस्तावेज़ आपको सही दिशा में इंगित करता है:

org.apache.http.client.HttpClient :

यह इंटरफ़ेस API स्तर 22 में बहिष्कृत किया गया था। कृपया इसके बजाय openConnection () का उपयोग करें। अधिक जानकारी के लिए कृपया इस वेबपेज पर जाएं।

इसका मतलब है कि आपको java.net.URL.openConnection() स्विच करना चाहिए।

यहां बताया गया है कि आप इसे कैसे कर सकते हैं:

URL url = new URL("http://some-server");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// read the response
System.out.println("Response Code: " + conn.getResponseCode());
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(response);

IOUtils प्रलेखन: अपाचे कॉमन्स आईओ
IOUtils निर्भरता: http://search.maven.org/#artifactdetails|org.apache.commons|commons-io|1.3.2|jar


कौन सा ग्राहक सबसे अच्छा है?

अपाचे HTTP क्लाइंट में एक्लेयर और फियोयो पर कम कीड़े हैं। इन रिलीज के लिए यह सबसे अच्छा विकल्प है।

जिंजरब्रेड और बेहतर के लिए, HttpURLConnection सबसे अच्छा विकल्प है। इसका सरल एपीआई और छोटा आकार यह एंड्रॉइड के लिए बहुत अच्छा बनाता है ...

अधिक जानकारी के लिए here संदर्भ (एंड्रॉइड डेवलपर्स ब्लॉग)





httpclient