정리가 필요한 카테고리(추후 정리)/Android, iOS

안드로이드] 안드로이드에서 HttpURLConnection을 이용해 POST 방식으로 데이터 전송하기

TwinParadox 2019. 6. 3. 22:26
728x90

HttpURLConnection 클래스를 이용하면 URL 요청하고 POST 방식으로 데이터를 전송하여 응답을 받을 수 있다. 기본적으로 Http 통신에서 지원하는 GET, POST 방식 등을 제공한다. 

 

 

try {
    URL url = new URL(uri);
    String result = "";
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Accept-Charset","UTF-8");
    conn.setUseCaches(false);
    conn.setRequestMethod("POST");
    conn.setConnectTimeout(10000);
    conn.setDoOutput(true);
    conn.setDoInput(true);

    OutputStream outputStream = conn.getOutputStream();
    outputStream.write(postData.getBytes("UTF-8"));
    outputStream.flush();
    outputStream.close();

    Log.i("PHPRequest","No Problem");
    result = readStream(conn.getInputStream());

    conn.disconnect();
    return result;
} catch (Exception ex) {
    Toast.makeText(getApplicationContext(),"데이터 전송 준비 과정 중 오류 발생",Toast.LENGTH_SHORT).show();
    return null;
}

 

이 코드는 개인적으로 진행하고 있던 프로젝트에서 호스팅 서버에 올려져 있는 PHP 파일에 POST 방식으로 데이터를 넘기는 부분을 구현한 코드다. POST 방식으로 보낼 데이터는 postData라는 String 데이터로, 이를 넘기기 위해서는 먼저 HTTP 통신을 열고, OutputStream을 이용해 값을 보낸다.

 

간혹 OutputStream을 생성하는 과정에서 conn.getOutputStream()을 통해 스트림을 얻지 못하는 경우가 있는데, 필자 같은 경우는 MainActivity가 아닌 다른 클래스에 데이터 전송 부분을 따로 두고 데이터를 보내려고 했을 때 문제가 있었다. 그래서 필자는 해당 클래스에 있는 함수들을 다 MainActivity로 이것을 다시 옮겨서 문제를 해결했다.

 

void setRequestMethod()

이 함수를 이용해서, GET 방식으로 할지, POST 방식으로 할지 정할 수 있다.

기본값은 GET 방식이다.

 

모든 작업이 끝났을 떄는 disconnect()를 이용해 연결을 끊어주는 것도 잊지 말자.

 

 

 

Reference & Recommend

HttpURLConnection

https://developer.android.com/reference/java/net/HttpURLConnection

 

AsyncTask

https://fun25.co.kr/blog/android-asynctask-httpurlconnection-post/?category=003

 

[안드로이드] AsyncTask 를 이용한 HttpURLConnection 사용법 | 퍼니오 호스팅

[안드로이드] AsyncTask 를 이용한 HttpURLConnection 사용법 안드로이드에서 http 통신을 할려면 AsyncTask 를 이용해야 합니다. 동기로 구현할 경우 앱이 멎는 현상이 발생할 수 있으니 안드로이드에서 정책상 동기방식으로 동작이 안 되도록 막아둔 것이구요. 네트웍 뿐만 아니라 앱의 동작을 매끄럽게 하기 위해서는 비동기 방식으로 동작할 수 있도록 AsyncTask 를 활용하는 것이 좋습니다. 아래는 AsyncTask 를 확장한 H

fun25.co.kr

 

 

728x90