Hinzufügen von Parametern zu HttpURLConnection mithilfe von POST mithilfe von NameValuePair


257

Ich versuche, POST mit zu machen HttpURLConnection(ich muss es auf diese Weise verwenden, kann es nicht verwenden HttpPost) und möchte dieser Verbindung Parameter hinzufügen, wie z

post.setEntity(new UrlEncodedFormEntity(nvp));

wo

nvp = new ArrayList<NameValuePair>();

Ich kann keinen Weg finden, wie ich dies ArrayListzu meinem HttpURLConnectionhier hinzugefügten hinzufügen kann :

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

Der Grund für diese umständliche Kombination aus https und http ist die Notwendigkeit, das Zertifikat nicht zu überprüfen . Das ist jedoch kein Problem, es postet den Server gut. Aber ich brauche es, um mit Argumenten zu posten.

Irgendwelche Ideen?


Doppelter Haftungsausschluss:

Im Jahr 2012 hatte ich keine Ahnung, wie Parameter in eine HTTP-POST- Anfrage eingefügt wurden . Ich habe daran festgehalten, NameValuePairweil es in einem Tutorial war. Diese Frage mag wie ein Duplikat erscheinen, aber mein 2012er hat diese andere Frage selbst gelesen und sie wurde NICHT verwendet NameValuePair. Es hat mein Problem tatsächlich nicht gelöst.


2
Wenn Sie Probleme beim Posten von Parametern haben, kann Ihnen der folgende Link helfen. stackoverflow.com/questions/2793150/…
Hitendra

1
String url = " example.com "; String charset = "UTF-8"; String param1 = "value1"; String param2 = "value2"; // ... String query = String.format ("param1 =% s & param2 =% s", URLEncoder.encode (param1, Zeichensatz), URLEncoder.encode (param2, Zeichensatz)); Sie können eine Abfragezeichenfolge erstellen, anstatt die NameValuePair-Liste zu verwenden.
Hitendra

"Ich muss es so verwenden, kann HttpPost nicht verwenden", deshalb habe ich vorgeschlagen, dass diese andere Antwort von Manikandan gut funktioniert.
Hitendra


1
Es war, weil "viele der Antworten" hier die gleichen waren wie die Antworten auf diese Frage. Aber jetzt sehe ich, dass es eine andere Frage ist, danke für die Klarstellung :)
Rogerdpack

Antworten:


362

Sie können den Ausgabestream für die Verbindung abrufen und die Parameterabfragezeichenfolge in diese schreiben.

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 kann auch durch SimpleEntry von AbstractMap ersetzt werden. Siehe diese Seite: stackoverflow.com/questions/2973041/a-keyvaluepair-in-java

Hier sind die Importe, wenn Sie sich nicht sicher sind. import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair;
WoodenKitty

9
Für eine optimale Leistung sollten Sie entweder setFixedLengthStreamingMode (int) aufrufen, wenn die Körperlänge im Voraus bekannt ist, oder setChunkedStreamingMode (int), wenn dies nicht der Fall ist. Andernfalls wird HttpURLConnection gezwungen, den gesamten Anforderungshauptteil im Speicher zu puffern, bevor er übertragen wird, wodurch Heap verschwendet (und möglicherweise erschöpft) und die Latenz erhöht wird.
Muhammad Babar

11
NameValuePair ist in Api 22 veraltet. Überprüfen Sie meine Antwort stackoverflow.com/a/29561084/4552938
Fahim

1
Möglicherweise können Sie den Rohmodus verwenden, wenn Sie ein URL-Objekt URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");erstellen. Wenn Sie conn für die Verwendung der POST-Methode festlegen, müssen Sie diese nicht schreiben.
Alexscmar

184

Da das NameValuePair veraltet ist. Ich dachte daran, meinen Code zu teilen

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
Danke, dass du es auf dem neuesten Stand hältst Fahim :-)
Michal

3
Wenn Ihre compileSdkVersion 23 (Marshmallow) ist, können Sie NameValuePair nicht mehr verwenden, da die Bibliothek entfernt wurde. Ich hatte Angst, dass Migration ein Schmerz sein würde, aber Ihre Lösung hat mir viel Zeit gespart. Danke dir.
ChallengeAccepted

Das funktioniert gut, aber warum hat die Antwort doppelte Anführungszeichen ""result""?
Apostrofix

1
Hatte einer von Ihnen ein Problem mit dieser Zeile OutputStream os = conn.getOutputStream();auf Jelly Bean, da keine Adresse mit dem Hostnamen verknüpft war?
Ricardo

1
Vielen Dank, dass Sie Ihren Code geteilt haben. Selbst die Android-Entwickler-Website bietet keine Lösung.
Ahsan

153

Wenn Sie die ArrayList<NameValuePair>for-Parameter nicht benötigen , ist dies eine kürzere Lösung, mit der die Abfragezeichenfolge mithilfe der Uri.BuilderKlasse erstellt wird:

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
Dies sollte eine Antwort sein, da das Rad nicht neu erfunden werden muss!
Injektor

Wie lade ich Filebody in Appendqueryparameter für Bilder und alles hoch
Harsha

2
zufriedenstellendere Lösung
PYPL

@mpolci, ich habe eine Frage / Zweifel bezüglich der komplexen Art von Parametern. Ich habe Parameter und weiß nicht, wie ich diese Parameter übergeben soll. {"Schlüssel1": "Wert1", "Schlüssel2": "Wert2", "Schlüssel3": {"innerer Schlüssel1": "innerer Wert1", "innerer Schlüssel2": "innerer Wert 2"}}. Ich habe diese Art von komplexen Schlüsselwertparametern erhalten und möchte wissen, wie ich diese Parameter im Webservice übergeben kann.
Krups

1
@Krups Ich denke, Ihr Problem ist anders als dieses, versuchen Sie, nach dem Senden von JSON-Objekt mit POST
mpolci

25

Eine Lösung besteht darin, eine eigene Parameterzeichenfolge zu erstellen.

Dies ist die eigentliche Methode, die ich für mein letztes Projekt verwendet habe. Sie müssen die Argumente von hashtable in namevaluepair ändern:

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

POSTEN der Parameter:

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

3
Sicherlich sollten Sie die Schlüssel-Wert-Paare codieren
Max Nanasy

14

Ich glaube, ich habe genau das gefunden, was Sie brauchen. Es kann anderen helfen.

Sie können die Methode UrlEncodedFormEntity.writeTo (OutputStream) verwenden .

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

Die akzeptierte Antwort löst eine ProtocolException aus bei:

OutputStream os = conn.getOutputStream();

da die Ausgabe für das URLConnection-Objekt nicht aktiviert wird. Die Lösung sollte Folgendes beinhalten:

conn.setDoOutput(true);

damit es funktioniert.


13

Wenn es nicht zu spät ist, möchte ich meinen Code teilen

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

@Srinivasan, wie Sie in meinem Code sehen: "if (urlConnection.getResponseCode () == HttpURLConnection.HTTP_OK) {...} else {...}"
BNK

Ja, das habe ich schon bekommen, aber ich habe gefragt, welche Variable die gesamte Antwort von der angegebenen URL haben wird
iSrinivasan27

1
@Srinivasan mehr Details können Sie InputStream versuchen inputStream = null; if (urlConnection.getResponseCode () == HttpURLConnection.HTTP_OK) {inputStream = urlConnection.getInputStream (); } else {inputStream = urlConnection.getErrorStream (); }
BNK

@Srinivasan tatsächlich, wenn resp Code <400 (Bad Request), verwenden Sie getInputStream, wenn> = 400, getErrorStream
BNK

1
Super Stuff Bro Gute Beispiele
Was ist los am

10

Es gibt einen viel einfacheren Ansatz mit PrintWriter (siehe hier) )

Grundsätzlich brauchen Sie nur:

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

AsyncTaskDaten wie JSONObectüber POSTMethode senden

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

Versuche dies:

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

Sie können so viele hinzufügen, nameValuePairswie Sie benötigen. Und vergessen Sie nicht, die Anzahl in der Liste zu erwähnen.


Verweisen Sie auf diesen Link. xyzws.com/Javafaq/…
Manikandan

1
Dies beantwortet nicht die Frage mit dem Titel How to add parameters to HttpURLConnection using POST- Es führt in die Irre.
User3

2
Dies ist keine richtige Antwort auf diese Frage.
Skynet

1
NameValuePair ist in Api 22 veraltet. Überprüfen Sie meine Antwort stackoverflow.com/a/29561084/4552938
Fahim

2

Zum Aufrufen von POST / PUT / DELETE / GET Restful-Methoden mit benutzerdefinierten Header- oder JSON-Daten kann die folgende Async-Klasse verwendet werden

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

Und die Verwendung ist

    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

Mit org.apache.http.client.HttpClient können Sie dies auch auf eine besser lesbare Weise wie unten beschrieben tun.

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

Innerhalb von try catch können Sie einfügen

// 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
Danke für die Antwort! Ich kann es jedoch nicht so verwenden (in der Frage, erste Zeile angegeben).
Michal

7
Dies ist keine richtige Antwort auf diese Frage.
Skynet

3
NameValuePair ist in Api 22 veraltet. Überprüfen Sie meine Antwort stackoverflow.com/a/29561084/4552938
Fahim

1
Sogar HTTP Client veraltet und entfernt in API 23
RevanthKrishnaKumar V.

0

In meinem Fall habe ich eine Funktion wie diese erstellt, um eine Post-Anfrage zu stellen, die eine String-URL und eine Hashmap von Parametern verwendet

 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

Ich benutze so etwas:

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

So übergebe ich "params" (JSONObject) durch POST

connection.getOutputStream().write(params.toString().getBytes("UTF-8"));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.