수색…


비고

  • 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에서 읽는 데 사용할 수 있습니다.

  • 참고 : 몇 줄의 Java 코드에서 String to String을 읽으십시오 .

용법:

매우 간단합니다 :

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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow