앱 만들기/안드로이드

안드로이드 HttpURLConnection 사용하여 네트워크 연결

나도 처음이야 2022. 1. 22.

자바에서 제공하는 HttpURLConnection 클래스를 사용하여

특정사이트의 값을 GET 방식으로 가져오는 예제이다.

HttpURLConnection 는 HTTP/1.1 통신방식으로 하나의 연결당 하나의 요청과 응답만 허용하기에 서버 입장에서는 심각한 자원리소스 오류를 경험할 수 있다.

그렇기에 2015년 표준이된 HTTP/2 가 나왔고 그를 지원하는 OkHttp 라이브러리가 생겨났다.

오늘은 1.1 방식의 코드를 남겨본다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new HttpAsyncTask().execute("https://m.naver.com");
    }

    private static class HttpAsyncTask extends AsyncTask<String,Void,String>{
        @Override
        protected String doInBackground(String... strings) {
           String result = null;
           String strUrl = strings[0];

            try {
                //URL 객체생성
                URL url = new URL(strUrl);
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                connection.setRequestMethod("GET");
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setUseCaches(true);
                connection.setDefaultUseCaches(true);

                //문자열 저장 객체
                StringBuffer builder = new StringBuffer();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(connection.getInputStream()));
                String line = null;
                while((line = reader.readLine()) != null){
                    builder.append(line+"\n");
                }
                result = builder.toString();

            } catch (IOException e) {
                e.printStackTrace();
            }
           return result;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if(s != null){
              Log.d("NET_TEST",s);
            }
        }
    }
}

위 코드를 실행하면, 네이버 로 부터 GET 방식으로 얻어온 태그 데이터를 Logcat 창에 프린트 해준다.

안드로이드 특성한 Main Thread 가 아닌 작업 Thread 에서 네트워크 동작을 구현하고 있다. 

감사합니다.

Logcat 창의 결과&amp;nbsp;

https://soo0100.tistory.com/1711 

 

반응형

댓글