[ Java ] : كلاس JAVA للقراءة و الكتابة على صفحة ويب - HttpURLConnection

تم تحميل الصفحة في 0,9501235 ثانية
كلاس JAVA للقراءة و الكتابة على صفحة ويب - HttpURLConnection
إنضم
27 مايو 2014
المشاركات
297
الإعجابات
391
النقاط
63
العمر
18
الإقامة
Marruecos
السَلام عليكم ,

قمت بكتاية كلاس بسيط يقوم بالقراءة و الكتابة على صفحة ويب بأستعمال الكلاس HttpUrlConnection ,

الكلاس و يحتوي على ميثود واحدة و هي ()ReadSource :

كود:
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class ConnectSource {

    private String url;
    private String source;
    private String method;
    private String postData = null;

    ConnectSource(String url, String method,String postData) {

        this.url = url;
        this.method = method;
        this.postData = postData;

    }

    String ReadSource() {
        String line;
        StringBuilder sourceB = new StringBuilder();
        BufferedReader bufReader = null;

        try {
            URL sourceURL = new URL(url);
            HttpURLConnection sourceURLH = (HttpURLConnection) sourceURL.openConnection();
            if (this.method == "POST") {

                sourceURLH.setRequestMethod(this.method);
                sourceURLH.setDoOutput(true);
                sourceURLH.setInstanceFollowRedirects(false);
                sourceURLH.setRequestProperty("Content-Type" , "application/x-www-form-urlencoded");
                sourceURLH.setRequestProperty("charset","utf-8");
                sourceURLH.setRequestProperty("Content-Length",Integer.toString(this.postData.getBytes().length));
                sourceURLH.setRequestProperty("User-Agent","Hello World");

                try(DataOutputStream wr = new DataOutputStream(sourceURLH.getOutputStream())){
                    wr.write(this.postData.getBytes());
                    bufReader = new BufferedReader(new InputStreamReader(sourceURLH.getInputStream()));
                    while ((line = bufReader.readLine()) != null){
                        sourceB.append(line + "\n");
                    }
                    source = sourceB.toString();
                }
            }

            else if (this.method == "GET")
            {
                sourceURLH.setRequestProperty("User-Agent","Hello World");
                bufReader = new BufferedReader(new InputStreamReader(sourceURLH.getInputStream()));
                while ((line = bufReader.readLine()) != null) {
                    sourceB.append(line + "\n");
                }
                source = sourceB.toString();
            }
            else {
                return "Error : The Method isn't available";
            }

        } catch (IOException e) {
            return "Error : " + e;
        }

        finally {

            if(bufReader != null){
                try {
                    bufReader.close();
                }
                catch (IOException e){

                }
            }
            }


        return source;
    }
}
طريقة الأستدعاء :

Java:
        ConnectSource cnt = new ConnectSource("http://localhost:8080/open.php","POST","pvar=10");
        String data = cnt.ReadSource();

        if(!data.contains("Error")){
            System.out.print(data);
        }
        else
        {
           //Error
        }
أو :

Java:
ConnectSource cnt = new ConnectSource("http://localhost:8080/open.php","GET",null);
 

Spawner Freezo

.:: مُساعد مُشرف أقسام البرمجة ::.
rankrank
إنضم
12 أبريل 2015
المشاركات
331
الإعجابات
503
النقاط
93
العمر
21
الإقامة
Morocco
شكراً لك على هذا طرح الجميل،


اتمنى أن تقبل مني هذه الملاحضات البسيطة، لإن إستعمال هذا ال Class يجب أن يعطي تحكم أكثر بقليل من الذي عليه،
إذن هذه ملاحضاتي :


  • أضف User-Agent في Parameters لل-Constructor كلاس.​
  • نفس شيء لل content-type.​
  • هل من أضروري إضافة variable أخرى لتخزين StringBuilder ? لا أعتقد ذلك، فقط أعمل return sourceB.ToString( ); مباشرة.​
  • في finally، يمكنك إزالة try/catch لل-bufReader، لأن من غير مشكلة Nullable object، لن يكون خطأ أخر، إذاً تحقق هل bufReader هل هو null أم لا يكفي.​

 
إنضم
27 مايو 2014
المشاركات
297
الإعجابات
391
النقاط
63
العمر
18
الإقامة
Marruecos
شكراً لك على هذا طرح الجميل،


اتمنى أن تقبل مني هذه الملاحضات البسيطة، لإن إستعمال هذا ال Class يجب أن يعطي تحكم أكثر بقليل من الذي عليه،
إذن هذه ملاحضاتي :


  • أضف User-Agent في Parameters لل-Constructor كلاس.​
  • نفس شيء لل content-type.​
  • هل من أضروري إضافة variable أخرى لتخزين StringBuilder ? لا أعتقد ذلك، فقط أعمل return sourceB.ToString( ); مباشرة.​
  • في finally، يمكنك إزالة try/catch لل-bufReader، لأن من غير مشكلة Nullable object، لن يكون خطأ أخر، إذاً تحقق هل bufReader هل هو null أم لا يكفي.​
شكرا على الملاحظات على الكود , تساعدني على تجنب الأخطاء مستقبلا .

- بخصوص User-Agent و ال Content-Type لم أفكر حقا كثيرا بجعل الكلاس قابل للأستخدام من طرف مستخدمين أخرين , أنا أعمل على مشروع خاص ,
فقمت بكتابة هذا الكلاس و ارتأيت أن أطرحه هنا لمن يريد قرائته أو ربما الأستفادة منه .

- بخصوص المتغير bufReader = new BufferedReader , فالدالة readline() تحتاج لمعالجة أخطاء من نوع IOException :


BufferedReader (Java Platform SE 7 )

- بخصوص المتغير source , صحيح يمكن الأستغناء عنه , لم أنتبه لهذه النقطة .
 
إنضم
27 مايو 2014
المشاركات
297
الإعجابات
391
النقاط
63
العمر
18
الإقامة
Marruecos
شكراً لك على هذا طرح الجميل،


اتمنى أن تقبل مني هذه الملاحضات البسيطة، لإن إستعمال هذا ال Class يجب أن يعطي تحكم أكثر بقليل من الذي عليه،
إذن هذه ملاحضاتي :


  • أضف User-Agent في Parameters لل-Constructor كلاس.​
  • نفس شيء لل content-type.​
  • هل من أضروري إضافة variable أخرى لتخزين StringBuilder ? لا أعتقد ذلك، فقط أعمل return sourceB.ToString( ); مباشرة.​
  • في finally، يمكنك إزالة try/catch لل-bufReader، لأن من غير مشكلة Nullable object، لن يكون خطأ أخر، إذاً تحقق هل bufReader هل هو null أم لا يكفي.​
في finally , ربما أنت تقصد ال try/catch داخل finally , الدالة close() تحتاج لمعالجة أخطاء من نوع IOException أيضا .
 
إنضم
27 مايو 2014
المشاركات
297
الإعجابات
391
النقاط
63
العمر
18
الإقامة
Marruecos
+ بخصوص الكائنات التي تحتاج للأغلاق بعد الأنتهاء منها أو أنتهاء البرنامج , يمكنك تجنب التأكد من أغلاقها بنفسك , حيث توفر الجافا خاصية جميلة و هي try-with-resources تقوم بغلق الكائن بنفسها ,
يمكنك القراءة أكثر عن الأمر هنا :

The try-with-resources Statement (The Java™ Tutorials > Essential Classes > Exceptions)
 

Spawner Freezo

.:: مُساعد مُشرف أقسام البرمجة ::.
rankrank
إنضم
12 أبريل 2015
المشاركات
331
الإعجابات
503
النقاط
93
العمر
21
الإقامة
Morocco
ولكنك استخدمت مسبقا try / catch في العملية الرئيسية وعالجت IOException ...

يمكنك أيضاً وضع فقط bufReader.close( ) لوحدها في finally، ستعمل بشكل جيد لإنك قمت بمعالجة bufReader IOException و close خذها ك إعادة وضع قيمة null في متغير bufReader.
 
الإعجابات: 4w1il

Spawner Freezo

.:: مُساعد مُشرف أقسام البرمجة ::.
rankrank
إنضم
12 أبريل 2015
المشاركات
331
الإعجابات
503
النقاط
93
العمر
21
الإقامة
Morocco
جى ليل أو بديت نخربق حتى EDIT مكينش هههه

--
يبدو أني دمجت الأمور بين #C و-Java


فقط للتوضيح لم أعني أن close = null ههه لا طبعا، ف close هي اختيارية لكن من الأفضل عمل ()close لأي Stream منشء ... أعني مثلاً إذا وضعنا close ثم مباشرةً عمل read سنحصل على Exception لأن ()close لل-bufRead يمحي أي شيء متعلق به + يغلق Stream ...

في #c هناك Dispose() و-Close()، لكن في Java Close() تعمل أيضاً ك Dispose()
 
الإعجابات: 4w1il

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل