Java Language
HttpURLConnection
수색…
비고
Android에서 HttpUrlConnection을 사용하려면
AndroidManifest.xml
의 앱에 인터넷 권한을 추가해야합니다.Square의 OkHttp 와 같은 다른 Java HTTP 클라이언트와 라이브러리도 사용하기가 쉽고 더 나은 성능이나 더 많은 기능을 제공 할 수 있습니다.
String에서 응답 본문 가져 오기
String getText(String url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
//add headers to the connection, or check the status if desired..
// handle error response code it occurs
int responseCode = conn.getResponseCode();
InputStream inputStream;
if (200 <= responseCode && responseCode <= 299) {
inputStream = connection.getInputStream();
} else {
inputStream = connection.getErrorStream();
}
BufferedReader in = new BufferedReader(
new InputStreamReader(
inputStream));
StringBuilder response = new StringBuilder();
String currentLine;
while ((currentLine = in.readLine()) != null)
response.append(currentLine);
in.close();
return response.toString();
}
그러면 지정된 URL에서 텍스트 데이터를 다운로드하고이를 String으로 반환합니다.
작동 원리 :
먼저
new URL(url).openConnection()
을 사용하여 URL에서HttpUrlConnection
을 만듭니다. 우리는HttpUrlConnection
반환하는UrlConnection
캐스팅하므로 헤더 추가 (예 : 사용자 에이전트) 또는 응답 코드 확인과 같은 작업에 액세스 할 수 있습니다. (이 예제는 그렇게하지 않지만 추가하기 쉽습니다.)그런 다음 응답 코드에 따라
InputStream
작성하십시오 (오류 처리의 경우)그런 다음 우리가 연결에서 얻은
InputStream
에서 텍스트를 읽을 수있는BufferedReader
를 생성하십시오.이제 텍스트를 줄 단위로
StringBuilder
추가합니다.InputStream
닫고, 지금 가지고있는 String을 돌려 준다.
노트:
이 메소드는, 실패했을 경우 (네트워크 장해 또는 인터넷 접속 없음 등)에
IoException
를 슬로우 해, 지정된 URL가 유효하지 않은 경우는, 체크되지 않는MalformedUrlException
Throw합니다.웹 페이지 (HTML), JSON 또는 XML을 반환하는 REST API 등 텍스트를 반환하는 모든 URL에서 읽는 데 사용할 수 있습니다.
용법:
매우 간단합니다 :
String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.
포스트 데이터
public static void post(String url, byte [] data, String contentType) throws IOException {
HttpURLConnection connection = null;
OutputStream out = null;
InputStream in = null;
try {
connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestProperty("Content-Type", contentType);
connection.setDoOutput(true);
out = connection.getOutputStream();
out.write(data);
out.close();
in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
in.close();
} finally {
if (connection != null) connection.disconnect();
if (out != null) out.close();
if (in != null) in.close();
}
}
이렇게하면 지정한 URL로 POST 데이터가 전송 된 다음 줄 단위로 응답을 읽습니다.
작동 원리
- 평소처럼 우리는
URL
에서HttpURLConnection
을 얻습니다. -
setRequestProperty
사용하여 콘텐츠 유형을 설정합니다. 기본값은application/x-www-form-urlencoded
-
setDoOutput(true)
는 데이터를 보낼 연결을 알려줍니다. - 그런 다음
getOutputStream()
을 호출하여OutputStream
을 가져 와서 데이터를 작성합니다. 완료 후에는 그것을 닫는 것을 잊지 마십시오. - 마지막으로 우리는 서버 응답을 읽습니다.
리소스 삭제
public static void delete (String urlString, String contentType) throws IOException {
HttpURLConnection connection = null;
try {
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Content-Type", contentType);
Map<String, List<String>> map = connection.getHeaderFields();
StringBuilder sb = new StringBuilder();
Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry<String, String> entry = iterator.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if(iterator.hasNext())
{
sb.append(',').append(' ');
}
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) connection.disconnect();
}
}
이렇게하면 지정된 URL의 리소스가 삭제 된 다음 응답 헤더가 인쇄됩니다.
작동 원리
- 우리는
URL
에서HttpURLConnection
을 얻습니다. -
setRequestProperty
사용하여 콘텐츠 유형을 설정합니다. 기본값은application/x-www-form-urlencoded
-
setDoInput(true)
는 입력에 URL 연결을 사용한다는 것을 연결에 알립니다. - HTTP 삭제를 수행하는
setRequestMethod("DELETE")
마지막으로 서버 응답 헤더를 출력합니다.
리소스가 있는지 확인하십시오.
/**
* Checks if a resource exists by sending a HEAD-Request.
* @param url The url of a resource which has to be checked.
* @return true if the response code is 200 OK.
*/
public static final boolean checkIfResourceExists(URL url) throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
int code = conn.getResponseCode();
conn.disconnect();
return code == 200;
}
설명:
리소스가 있는지 여부를 확인하는 중이라면 GET보다 HEAD 요청을 사용하는 것이 좋습니다. 이렇게하면 리소스를 전송하는 오버 헤드를 피할 수 있습니다.
이 메소드는 응답 코드가 200
true
반환 true
. 리디렉션 (예 : 3XX) 응답을 예상하는 경우이를 보완하기 위해 메소드를 향상시켜야 할 수 있습니다.
예:
checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false