본문 바로가기
에러 해결

Flutter DioError SocketException: Failed host lookup 에러

by Devry 2023. 7. 31.

🛠환경

윈도우 10 최신
Flutter 3.10.6
Dart  3.0.6
dio ^4.0.0
DevTools 2.23.1

상황

Flutter로 공공데이터를 불러오는 프로젝트를 진행하였는데, 데이터를 GET요청하는 부분에서 DioError가 발생했습니다.

https://www.data.go.kr/index.do

DioError

원인 분석

  1. Open API를 사용하는 방법에서의 오류가 있을 수 있습니다(주소, 서비스 키 입력에서의 오류).
  2. DioError라고 출력되었으므로 dio 라이브러리와 연관이 있을 가능성이 높습니다.

 

PostMan과 브라우저에서 GET요청을 보냈을 땐 잘 작동했으므로 1번의 문제는 아닐 것입니다.

 

구글링 했을 때 가장 많이 나오는 내용은 AndroidManifest.xml 파일에 다음 코드를 삽입하라는 내용입니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

	<uses-permission android:name="android.permission.INTERNET"/> <!-- 이부분 삽입 -->

<uses-permission android:name="android.permission.INTERNET"/> 는 AVD(Android Virtual Device)에서 인터넷 사용을 허가하는 코드입니다.

 

인터넷이 연결되지 않은 AVD 화면

하지만 여전히 Wifi에 X가 있고 인터넷이 연결되지 않습니다.

일단 dio 라이브러리의 문제가 아닌 AVD의 인터넷 연결 문제란 것을 알 수 있었습니다.

 

🔑해결

제어판으로 가서 <네트워크 상태 및 작업 보기>를 들어갑니다

위의 화면과 다를 경우 우측 상단 보기기준을 범주로 바꾸어 줍니다.

 

 

이더넷 2로 들어갑니다.

 

 

속성에 들어갑니다.

 

 

인터넷 프로토콜 버전 4(TCP/IPv4)를 더블 클릭 합니다.

 

 

 

다음 DNS 서버 주소 사용을 체크하고, 기본 설정 DNS 서버8.8.8.8 을 입력 후 확인을 누릅니다.

 

 

 

 

 

이제 모든 창을 닫고, AVD에 캐시 데이터가 있을 수 있기 때문에 AVD도 종료합니다.

안드로이드 스튜디오를 켜고 Device Manager에 들어가서 테스트 중인 가상 기기의 ... 버튼을 누르면

Wipe Data가 있는데 클릭해서 데이터를 지워줍니다.

 

 

이제 main.dart를 실행하면 데이터가 잘 받아와 지는 것을 확인할 수 있습니다.

 

 

저 같은 경우 공공 데이터의 Encoding 인증키를 사용했을 때 인증키 에러가 떠서 Decoding 인증키를 사용했더니 동작하네요. 사이트 상에서도 구동되는 키는 상용하라고 하니, 인증키 에러가 떴을 때 꼭 확인해 보시기 바랍니다.

 

댓글