마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

웹페이지를 http url connection를 통해 읽어왔을 때 문제입니다.

0 추천

"https://icanhazip.com"에 공인 아이피를 http url connection으로 읽어 오려고 하고 있습니다.

해당 웹페이지는 단순 아이피만 보여주고 있는 웹사이트이구요. 아래 소스 코드를 통해 

로그를 보면 PUBLIC IP == 2605:8d80:6c5:1c56:b0cb:b434:d4b1:1798와 같이 표시 됩니다. 어떻한 인코딩이 필요한 건지 도무지 모르겠습니다.

우리가 일반적으로 보는 ip형태로 변환을 하는 방법이 있는 것인지 아니면, 해당 사이트에 ip 스트링이 특수한 건지

알수가 없습니다. 유경험자분 고수님들 답변 부탁드립니다. 아래는 웹사이트 아이피를 읽어오는 부분의 코드입니다.

 private class getPublicIP extends AsyncTask<String, Void, Message> {

        @Override
        protected Message doInBackground(String... params) {
            StringBuffer sBuffer = new StringBuffer();
            Message msg = m_uiHandler.obtainMessage();
            try{
                String urlAddr = params[0];
                URL url = new URL(urlAddr);
                URLConnection conn = url.openConnection();
                HttpURLConnection httpURLConnection = (HttpURLConnection)conn;
                httpURLConnection.setRequestMethod("GET");
                if(httpURLConnection != null){
                    httpURLConnection.setConnectTimeout(10000);
                    httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    if(httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK){
                        InputStreamReader isr = new InputStreamReader(conn.getInputStream());
                        BufferedReader br = new BufferedReader(isr);
                        while(true){
                            String line = br.readLine();
                            if(line==null){
                                break;
                            }
                            sBuffer.append(line);
                        }
                        br.close();
                        httpURLConnection.disconnect();
                    }
                }
                String publicIP = sBuffer.toString();

                if(publicIP !=null && !publicIP.isEmpty()) {
                    LogTrace.i(TAG, "PUBLIC IP == " + publicIP);
                    msg.what = GET_PUBLIC_IP;
                    msg.obj = publicIP;
                }else{
                    msg.what = GET_PUBLIC_IP_FAIL;
                }

            } catch (Exception e) {
                LogTrace.e(TAG, "URL Exception = " + e.getMessage());
                msg.what = GET_PUBLIC_IP_EXCEPTION;
            }
            return msg;
        }

 

 

익명사용자 님이 2016년 11월 14일 질문

1개의 답변

0 추천
인코딩 문제가 아니라 서버에서 IPv6 형태로 내려주는거 같은데요.
Development Guy (70,570 포인트) 님이 2016년 11월 14일 답변
...