java.io.IOException: Cleartext HTTP traffic to ‘domain’ not permitted 문제 해결 포스트입니다.
요새 이것저것 기능들에 대해 테스트를 해보고 있습니다.
그러면서 Jsoup 기능을 사용해보면서 Crawling을 하는데, https의 경우 별 문제가 없는데, http 통신을 하는 페이지의 경우 수집이 제대로 되지 않는 문제가 있었습니다.
잘 안보이실 수 있지만, Logcat부분을 발췌했습니다.
오류난 부분의 핵심 부분을 적어보자면 이렇습니다.
System.err: java.io.IOException: Cleartext HTTP traffic to ‘domain’ not permitted
버튼 클릭 이벤트를 통해 크롤링을 진행했는데, 버튼을 누르면서 에러가 발생하는 시점에 나타나는 문구입니다.
제 사이트의 경우 https 통신을 하고 있기 때문에 별 문제가 없었는데, 그 외 http(80) 통신을 하는 사이트의 경우 이러한 에러가 발생했습니다.
문제는 금방 찾아볼 수 있었습니다.
문제 원인
안드로이드 9부터는 http에 대해 네트워크 보안정책이 강화되면서 이러한 에러가 발생하는 것 같습니다.
실제로 구글에서는 http 서비스에 대해서는 크롬에서 통신이 안되게 하겠다고 예전에 얘기했었던게 기억이 나네요.
해결 방법
해결은 AndroidManifest.xml 파일을 조정해주면 됩니다.
위 파일은 AndroidManifest.xml 파일의 전문입니다.
살짝 수정한 부분은 있지만, 이 오류 해결방법을 소개해드리는데에는 별 문제가 없으니 있는 그대로 참고하셔도 무관합니다.
<application> 태그 부분에 한 줄 추가해주시면 됩니다.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:usesCleartextTraffic="true"
//윗줄입니다!
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
‘android:usesCleartextTraffic=”true”‘ 를 추가해주시면 문제는 해결됩니다.
근데, 이걸로 해결이 안된다면 아에 인터넷 통신이 안되는걸 수도 있기 때문에 그 위에 있는 uses-permission 부분도 추가해주셔야 하겠습니다.
대부분 이걸로 해결이 될 것으로 생각됩니다.
만약 이걸로 해결이 되지 않으신다면, 댓글 남겨주시기 바랍니다.
다른 방법을 같이 고민해보겠습니다.
지금까지 java.io.IOException: Cleartext HTTP traffic to ‘domain’ not permitted 문제 해결 포스트였습니다.
다른 Android 관련 글을 보고 싶으시다면 여기를 눌러주세요.
Comments 2
감사합니다 덕분에 해결했어요
Author
해결되셨다니 다행입니다^^