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

URLConnection으로 HeaderField 조회하는 방법

0 추천
     String result = shortUrl;

     String header;
     do {
     URL url = new URL(result);
     HttpURLConnection.setFollowRedirects(false);
     URLConnection conn = url.openConnection();
     header = conn.getHeaderField(null);
     Log.e("msg", "header : " + header);
     String location = conn.getHeaderField("Location");
     Log.e("msg", "location : " + location);
     if (location != null) {
     result = location;
     }
     } while (header.contains("301"));

위의 소스는 (물론 log.e 제외) 자바에서 단축url로 long url 값을 알아오는 것인데요.

이 것을 안드로이드에 그대로 넣고 실행 시키면 header = conn.getHeaderField(null); 부분에서 에러가 발생합니다.

이 외에 방법으로 header 값을 알 수 있는 방법이 있을까요?

펍펍드로이드 (140 포인트) 님이 2014년 9월 25일 질문

1개의 답변

0 추천
Map<String, List<String>> headers = conn.getHeaderFields();

해서 받으시고 headers 를 iterator쓰던가, Map.Entry로하든가해서 포문 돌려서 뽑아 쓰세요.
익명사용자 님이 2014년 9월 25일 답변
감사합니다. 말씀해주신대로 해보았는데, 이번엔 Map<String, List<String>> headers = conn.getHeaderFields(); 에서 에러가 발생하네요 흑흑..





        Map<String, List<String>> headers = conn.getHeaderFields();

        Iterator<String> it = headers.keySet().iterator();
            while(it.hasNext()) {
                 String key = it.next();
                 List<String> values = headers.get(key);
                 StringBuffer sb = new StringBuffer();
                 for(int i=0; i<values.size(); i++) {
                      sb.append(";" + values.get(i));
                 }
                 Log.d("test", key + "=" + sb.toString().substring(1));
        }
자가해결...

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

추가했습니다.

찾아보니 메인에서 네트워크 요청하면 에러나도록 안드로이드에서 변경되었다고하는군요..

소스상 문제는 없는데..

댓글 감사합니다.
...