Как отправить POST запрос с помощью HttpURLConnection?

Добрый вечер. Начал разбираться в программировании под android и нашел много поднобных инструкций по отправке POST запроса на php сервер с помощью HttpClient, но потом выяснил что он устарел и перестал поддерживаться последим SDK который у меня установлен.

После чего узнал что следует пользоваться HttpURLConnection, но информации о том как осуществить с помощью него POST или GET запросы и обработать ответ от сервера не нашел.

Надеюсь на вашу помощь, желательно с подробными примерами. Огромное спасибо.
  • Вопрос задан
  • 39060 просмотров
Решения вопроса 1
@tepexob
Минимум как-то так. А там сами обработаете что и как требуется и положено.

String myURL = "http://myserver.com";
String params = "param1=1&param2=XXX";
byte[] data = null;
InputStream is = null;

try {
    URL url = new URL(myURL);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    conn.setRequestProperty("Content-Length", "" + Integer.toString(params.getBytes().length));
    OutputStream os = conn.getOutputStream();
    data = params.getBytes("UTF-8");
    os.write(data);
    data = null;

    conn.connect();
    int responseCode= conn.getResponseCode();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    is = conn.getInputStream();

    byte[] buffer = new byte[8192]; // Такого вот размера буфер
    // Далее, например, вот так читаем ответ
    int bytesRead;
    while ((bytesRead = is.read(buffer)) != -1) {
        baos.write(buffer, 0, bytesRead);
    }
    data = baos.toByteArray();
} catch (Exception e) {
} finally {
    try {
        if (is != null)
            is.close();
    } catch (Exception ex) {}
}
return data;


Особого отличия от HttpClient нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Wolfak Автор вопроса
Разобрался, может кому пригодится:
class SendLoginData extends AsyncTask<Void, Void, Void> {

        String resultString = null;

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

        @Override
        protected Void doInBackground(Void... params) {
            try {
                String myURL = "http://site.ru/";
                String parammetrs = "param1=1&param2=XXX";
                byte[] data = null;
                InputStream is = null;

                try {
                    URL url = new URL(myURL);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("POST");
                    conn.setDoOutput(true);
                    conn.setDoInput(true);

                    conn.setRequestProperty("Content-Length", "" + Integer.toString(parammetrs.getBytes().length));
                    OutputStream os = conn.getOutputStream();
                    data = parammetrs.getBytes("UTF-8");
                    os.write(data);
                    data = null;

                    conn.connect();
                    int responseCode= conn.getResponseCode();

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();

                    if (responseCode == 200) {
                        is = conn.getInputStream();

                        byte[] buffer = new byte[8192]; // Такого вот размера буфер
                        // Далее, например, вот так читаем ответ
                        int bytesRead;
                        while ((bytesRead = is.read(buffer)) != -1) {
                            baos.write(buffer, 0, bytesRead);
                        }
                        data = baos.toByteArray();
                        resultString = new String(data, "UTF-8");
                    } else {
                    }



                } catch (MalformedURLException e) {

                    //resultString = "MalformedURLException:" + e.getMessage();
                } catch (IOException e) {

                    //resultString = "IOException:" + e.getMessage();
                } catch (Exception e) {

                    //resultString = "Exception:" + e.getMessage();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if(resultString != null) {
                Toast toast = Toast.makeText(getApplicationContext(), resultString, Toast.LENGTH_SHORT);
                toast.show();
            }

        }
    }
Ответ написан
@coden55
https://github.com/kevinsawicki/http-request - рекомендую библиотеку, использует HttpURLConnection, просто и удобно. Все с примерами по ссылке
Ответ написан
larry-troy
@larry-troy
software engineer
Есть очень хорошая либа https://code.google.com/p/android-query/ позволяет не только посылать HTTP запросы.
Ответ написан
Комментировать
@cherry1
а что в параметрах (parammetrs) записывается? Логин и пароль?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы