주요 언어/JAVA

HTTP GET 요청시 java.net.URISyntaxException 에러 해결 방법

기록원장 2025. 1. 13. 23:29
반응형
HTTP GET 요청 시 java.net.URISyntaxException: Illegal character in scheme name at index 0 에러 해결 방법

 

HttpGet http = new HttpGet(192.168.0.xxx:8080/....);

 

RESTful API 호출을 위해 Apache HttpClient 라이브러리를 사용하여 URL(192.168.0.xxx:8080/....)로 HTTP GET 요청을 준비하는 객체를 생성하는데 java.net.URISyntaxException 에러가 발생했다.

 

 

◆ 에러 내용


java.lang.IllegalArgumentException: Illegal character in scheme name at index 0: 192.168.0.xxx:8080/....
at java.base/java.net.URI.create(URI.java:906)
at org.apache.http.client.methods.HttpGet.(HttpGet.java:66)
.....
Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0: 192.168.0.xxx:8080/....
at java.base/java.net.URI$Parser.fail(URI.java:2976)

.....

 

 

◆ 에러 원인


에러가 발생한 원인은 RFC 2396에서 정의한 URI 문법을 따르지 않았기 때문인데, URI 문자열의 시작 부분에 http, https, ftp, mailto 등으로 시작하는 스키마 (scheme)가 없어서 192.168.0.xxx이 스키마로 인식되려고 하다가 실패해 java.net.URISyntaxException이 발생했었던 것이다.

 

메서드를 따라가 확인해보니 URI.java의 Parser에서 URISyntaxException이 발생하고 있었는데, URI메서드의 JavaDoc 주석을 확인해보니 URI는 반드시 RFC 2396 표준을 따라야 한다고 나와있었다.

 

 

 

◆ 해결 방법

 

 


http(s)://hostname[:port]/path[?query_parameters]

결국 위와 같은 형식으로 URL가 구성되어야 하기 때문에, 문제가 되었던 요청 URL에 "http://"을 추가했더니 에러 없이 정상 작동한다.

<수정 전> HttpGet http = new HttpGet(192.168.0.xxx:8080/....); 
<수정 후> HttpGet http = new HttpGet(http://192.168.0.xxx:8080/....);

 


글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --

 

반응형