Java에서 HttpURLConnection + ConvertStreamToString() 유틸리티를 사용하여 GitHub 파일 내용을 읽는 방법
게시 됨: 2017-12-30이 Java 자습서에서는 HttpURLConnection을 사용하여 GitHub URL 콘텐츠를 검색하는 단계를 살펴보겠습니다. 즉, 아래는 GitHub에서 파일 콘텐츠를 가져오는 Java API입니다.
각 HttpURLConnection
인스턴스는 단일 요청을 만드는 데 사용되지만 HTTP 서버에 대한 기본 네트워크 연결은 다른 인스턴스에서 투명하게 공유할 수 있습니다. getHeaderFields()
헤더 필드의 수정 불가능한 맵을 반환합니다. 맵 키는 응답 헤더 필드 이름을 나타내는 문자열입니다. 각 맵 값은 해당 필드 값을 나타내는 수정 불가능한 문자열 목록입니다.
이제 시작하겠습니다.
-
CrunchifyLoadGithubContent.java
클래스 생성 - 콘텐츠를 다운로드합니다: https://raw.githubusercontent.com/Crunchify/wp-super-cache/master/wp-cache.php (플러그인에서: WP Super Cache Github Repo)
- getHeaderFields() API를 사용하여 모든 헤더 필드를 가져옵니다. 위의 URL 또는 다른 URL이 리디렉션되는지 여부를 확인하려면 이것이 필요합니까? 참고: 이것은 완전히 선택 사항입니다. HTTP 301 및 HTTP 302 리디렉션의 경우 이것이 도움이 될 것입니다.
- 스트림을 문자열로 변환하는 API
crunchifyGetStringFromStream( InputStream crunchifyStream)
을 만듭니다. - 동일한 출력을 콘솔에 인쇄합니다.
참고: HTTP 상태 301은 리소스(페이지)가 새 위치로 영구적으로 이동되었음을 의미합니다. 302는 요청한 리소스가 일시적으로 다른 URI 아래에 있다는 것입니다. 301 대 302는 크롤러가 301을 사용할 때 이를 고려하고 페이지 순위를 전송하기 때문에 검색 엔진의 인덱싱에 중요합니다.
또한 GitHub URL이 공개되어야 한다는 가정이 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
package crunchify . com . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStream ; import java . io . InputStreamReader ; import java . io . Reader ; import java . io . StringWriter ; import java . io . Writer ; import java . net . HttpURLConnection ; import java . net . URL ; import java . util . List ; import java . util . Map ; /** * @author Crunchify.com * */ public class CrunchifyLoadGithubContent { public static void main ( String [ ] args ) throws Throwable { String link = "https://raw.githubusercontent.com/Crunchify/All-in-One-Webmaster/master/all-in-one-webmaster-premium.php" ; URL crunchifyUrl = new URL ( link ) ; HttpURLConnection crunchifyHttp = ( HttpURLConnection ) crunchifyUrl . openConnection ( ) ; Map < String , List <String> > crunchifyHeader = crunchifyHttp . getHeaderFields ( ) ; // If URL is getting 301 and 302 redirection HTTP code then get new URL link. // This below for loop is totally optional if you are sure that your URL is not getting redirected to anywhere for ( String header : crunchifyHeader . get ( null ) ) { if ( header . contains ( " 302 " ) | | header . contains ( " 301 " ) ) { link = crunchifyHeader . get ( "Location" ) . get ( 0 ) ; crunchifyUrl = new URL ( link ) ; crunchifyHttp = ( HttpURLConnection ) crunchifyUrl . openConnection ( ) ; crunchifyHeader = crunchifyHttp . getHeaderFields ( ) ; } } InputStream crunchifyStream = crunchifyHttp . getInputStream ( ) ; String crunchifyResponse = crunchifyGetStringFromStream ( crunchifyStream ) ; System . out . println ( crunchifyResponse ) ; } // ConvertStreamToString() Utility - we name it as crunchifyGetStringFromStream() private static String crunchifyGetStringFromStream ( InputStream crunchifyStream ) throws IOException { if ( crunchifyStream ! = null ) { Writer crunchifyWriter = new StringWriter ( ) ; char [ ] crunchifyBuffer = new char [ 2048 ] ; try { Reader crunchifyReader = new BufferedReader ( new InputStreamReader ( crunchifyStream , "UTF-8" ) ) ; int counter ; while ( ( counter = crunchifyReader . read ( crunchifyBuffer ) ) ! = - 1 ) { crunchifyWriter . write ( crunchifyBuffer , 0 , counter ) ; } } finally { crunchifyStream . close ( ) ; } return crunchifyWriter . toString ( ) ; } else { return "No Contents" ; } } } |
디버깅하는 동안 crunchifyHeader
값의 일부로 이것을 얻었습니다. 또한 이 튜토리얼은 Bitbucket public repo에도 적용됩니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
{ null = [ HTTP / 1.1200OK // this is what we are checking in above for loop. If 301 or 302 then get new URL. ] , X - Cache - Hits = [ 1 ] , ETag = [ "94a3eb8b3b5505f746aa8530667969673a8e182d" ] , Content - Length = [ 24436 ] , X - XSS - Protection = [ 1 ; mode = block ] , Expires = [ Mon , 27Oct201420 : 00 : 31GMT ] , X - Served - By = [ cache - dfw1825 - DFW ] , Source - Age = [ 14 ] , Connection = [ Keep - Alive ] , Server = [ Apache ] , X - Cache = [ HIT ] , Cache - Control = [ max - age = 300 ] , X - Content - Type - Options = [ nosniff ] , X - Frame - Options = [ deny ] , Strict - Transport - Security = [ max - age = 31536000 ] , Vary = [ Authorization , Accept - Encoding ] , Access - Control - Allow - Origin = [ https : //render.githubusercontent.com ] , Date = [ Mon , 27Oct201419 : 55 : 31GMT ] , Via = [ 1.1varnish ] , Keep - Alive = [ timeout = 10 , max = 50 ] , Accept - Ranges = [ bytes ] , Content - Type = [ text / plain ; charset = utf - 8 ] , Content - Security - Policy = [ default - src 'none' ] } |