في Java كيفية قراءة محتويات ملف GitHub باستخدام الأداة المساعدة HttpURLConnection + ConvertStreamToString ()
نشرت: 2017-12-30في هذا البرنامج التعليمي لـ Java ، سنتجاوز الخطوات لاسترداد محتوى عنوان URL لـ GitHub باستخدام HttpURLConnection. بمعنى آخر ، يوجد أدناه Java API للحصول على محتوى ملف من GitHub.
يتم استخدام كل مثيل HttpURLConnection
لتقديم طلب واحد ولكن قد تتم مشاركة اتصال الشبكة الأساسي بخادم HTTP بشفافية بواسطة مثيلات أخرى. getHeaderFields()
خريطة حقول الرأس غير القابلة للتعديل. مفاتيح الخريطة هي سلاسل تمثل أسماء حقول رأس الاستجابة. كل قيمة خريطة هي قائمة سلاسل غير قابلة للتعديل تمثل قيم الحقل المقابلة.
لنبدأ الآن:
- قم بإنشاء فئة
CrunchifyLoadGithubContent.java
- سنقوم بتنزيل المحتويات: https://raw.githubusercontent.com/Crunchify/wp-super-cache/master/wp-cache.php (من البرنامج المساعد: WP Super Cache Github Repo)
- احصل على جميع حقول الرأس باستخدام واجهة برمجة تطبيقات getHeaderFields (). نحتاج إلى هذا لمعرفة ما إذا كان يتم إعادة توجيه عنوان URL أعلاه أو أي عنوان URL آخر أم لا؟ ملاحظة: هذا اختياري تمامًا. في حالة إعادة توجيه HTTP 301 و HTTP 302 ، سيساعد ذلك.
- قم بإنشاء واجهة برمجة التطبيقات
crunchifyGetStringFromStream( InputStream crunchifyStream)
لتحويل الدفق إلى سلسلة. - اطبع نفس الإخراج إلى وحدة التحكم.
ملاحظة: تعني حالة HTTP 301 أنه تم نقل المورد (الصفحة) بشكل دائم إلى موقع جديد. 302 هو أنه طلب أن المورد يقيم مؤقتًا تحت URI مختلف. غالبًا ما يكون 301 مقابل 302 مهمًا للفهرسة في محركات البحث حيث تأخذ برامج الزحف الخاصة بهم هذا في الحساب وترتيب صفحة النقل عند استخدام 301.
أيضًا ، هناك افتراض - يجب أن يكون عنوان URL لـ GitHub عامًا.
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 أيضًا.

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' ] } |