السلام عليكم ورحمة الله وبركاته
نرحب بكم ساداتي الكرام في هذا الشهر الفضيل في اول موضوع من سلسلة [التعامل مع الويب]
تتكون السلسة من 3 مقالات مختلفة تتعلق بالتعامل مع الويب او صفحات الويب
اتت فكرة الموضوع منذ فترة في بالي ، حيث لا يوجد مصدر عربي واحد
يتكلم عن التعامل مع الويب ، فهذا هو الموضوع الاول والحصري
للتعامل مع الطلبات والويب ، في الحقيقة كان من المفترض ان
تكون المقالة على لغتي VB + سي شارب ، ولكن
احس ان السي شارب مظلومة شوي فقررت اجعل الدروس حصريا لها
بالاضافة ان المقالة طويلة نوعا ما فوجود اكواد كثيرة يربك القارئ ويربكني ايضا
إن شاء الله تنفعكم المقالة والمقالات القادمة
ونبدأ معكم اخواني الاعزاء مقالتنا الجميلة.
--
--
--
صفر :- أجزاء المقالة
1- تعريف طلبات الويب (Web requset)
2- بروتوكولات طلبات الويب
3- خصائص وطرق كائن ارسال الطلبات
4- جلب صيغة الطلب
5- ارسال الطلب
6.1- استخدام Cookies Container مع الطلبات
6.2- طريقة استخدام الطلبات لتسجيل الدخول في المنتدى
7- طريقة استخدام الطلبات لرفع البيانات لمراكز الرفع
8- التعامل مع سيرفر الFTP باستخدام كائن ارسال طلبات FTP
9- الخاتمة
--
--
--
اولا :- تعريف الطلب
الطلب هو بيانات ترسلها لخادم الويب(Server) لكي يقوم بعمل ما.
كل طلب يتم ارساله للسيرفر ، يتم استقبال رد (Response) عليه
فاتسجيل الدخول للمنتديات مثلا ، يتم بالضغط على زر Log in في المنتدى
عندما يتم الضغط على الزر ، يرسل المتصفح طلبا يحتوي على بيانات العضوية
يتلقى الخادم الطلب ويعالجه (يبحث في قاعدة البيانات) ويرسل ردا يحتوي على بيانات
يترجم المتصفح الرد ويعرض لك المحتوى المترجم .
سنتعلم ان شاء الله كيفية الاستغناء عن المتصفحات وارسال الطلبات وتلقي الردود وعرض محتوى الرد او معالجته
--
--
--
ثانيا :- بروتوكولات الطلبات
يوجد العديد من البروتوكلات المستخدمة في ارسال الطلبات
ابرزها :-
-
1- Post : وهو البروتوكول الاكثر شيوعا وسنتخدمه كثيرا ،
هذا البروتوكول يستخدم لـ إرسال معلومات من المستخدم الزبون (من form في صفحة html مثلا) للخادم ، مثلا
انشاء موضوع في المنتدى يتطلب ارسال بيانات (العنوان ، نص الموضوع ، الكلمات الدلالية ....الخ)
او تسجيل الدخول للمنتدى ، او البحث -- كل هذا يتم عبر Post Requset
2- Get : وهو بروتوكول يستخدم لعرض طلبك (صورة-ملف-صفحة Html ,وغيرها)
مثلا لو اريد ان اعرض صفحة قوقل الرئيسية ، اقوم بإرسال طلب Get ، ثم يرسل لي الخادم
ردا (Response) يحتوي على اكواد Html للصفحة
3- Head : هو برتوكول مشابه كثيرا لـ Get ،
الـ Get يقوم بجلب طلبك(صورة-صفحة-ملف) مع شيئ اسمه Response header
لكن الـHead يقوم بجلب Response header فقط دون جلب المحتوى - يعني لو اردت
الإستعلام عن مساحة ملف فقط استخدم Head ولا يجوز Get ، لأن Get راح تجلب لي المحتوى ، يعني بتعطينا الBytes للملف
>الـ Response header هي معلومات عن الرد يرسلها لك السيرفر عند تلقي الطلب<
سنتعرف على الـResponse Header و Request Header لاحقا
4- Put : بروتوكول يستخدم لرفع ملف
-
هذي البروتوكولات المشهورة ولاحاجة لذكر غيرها
للمزيد عن هذه البروتولات قم بزيارة الرابط التالي : هنا
--
--
--
ثالثا :- كائن ارسال الطلبات
الفئة السحرية التي تمكننا من ارسال الطلبات اسمها HttpWebRequset ضمن مجال الاسماء System.Net
والفئة التي تمكننا من اسقبال الردود اسمها HttpWebResponse ضمن مجال الاسماء System.Net
هاتان الفئتان كلاهما abstract
اي لايمكنك عمل نسخة منهما
فلتعريفها نكتب التالي :
قمنا بتعريف كائن وقما بإنشاء طلب.
لاتنسى اضافة مجال الاسماء في اعلى المحرر :
--
لن نحاول ان نرسل طلبا الان ، في هذا الجزء من المقالة سنقوم بـ شرح بعض الدوال والخصائص المهمة
--
خصائص كائن ارسال الطلب (HttpWebRequset)
1- خاصية Address : تعطيك رابط الطلب
2- خاصية AllowAutoRedirect : السماح للسيرفر بتحويل رابط الطلب الى رابط اخر
3- خاصية ContentLength : سحب او اعطاء طول بيانات الطلب
4- خاصية ContentType : سحب او اعطاء نوع الطلب - مهم جدا لطلبات بروتوكول POST
5- خاصية CookieContainer : سحب او اعطاء حاوية الكوكيز - سنتعرف لها لاحقا
6- خاصية Credentials : سحب او اعطاء بيانات الوصول مثلا(USERNAME او PASSWORD) - كسيرفرات FTP على سبيل المثال
7- خاصية KeepAlive : سحب او اعطاء قيمة تعبر عن استمرارية الاتصال مع السيرفر - تستعمل عند رفع الملفات عادا كي لاينقطع الاتصال
8- خاصية Method : من اهم الخواص - تستعمل لإختيار البروتوكول المستعمل للطلب (POST, GET , ...etc)
9-خاصية Timeout : الوقت المحدد لإلغاء الطلب في حالة عدم استجابة السيرفر اوعدم وصول الرد في الوقت المحدد
10- خاصية UserAgent : وكيل المستخدم - هو نص يعبر عن المتصفح المستخدم في الطلب (او المنصة الحالية) عادا
تظهر الفائدة الكبرى لهذه الخاصية عندما يكون تطبيقك لعدة منصات فمثلا ، اجهزة الجوال تعرض صفحات الويب بشكل اخر عن الكمبيوتر
جرب تدخل الyoutube من جوالك وشوف ، هنا تم استعمال UserAgent خاص عند طلب فتح صفحة اليوتيوب لكي تعرض بشكل الجوال ، لا بشكل الكمبيوتر المعتاد
--
إجرائات ودوال كائن ارسال الطلب (HttpWebRequset)
1- الاجراء Abort : الغاء الطلب
2- دالة GetRequestStream : فتح تيار كتابة البيانات للطلب - مهم جدا ، فهنا نكتب بيانات الطلب ، كبيانات العضوية او بيانات ملف الخ...
3- دالة GetResponse : ارسال الطلب + جلب الرد ، دالة دائما وابدا تستخدم في الطلب حيث ان الطلب لايتم الى باستدعائها
هكذا انتهينا من الدوال والخصائص المهمة
--
--
--
رابعا :- جلب صيغة الطلب
نبدأ الان الشغل العملي في هذا الجزء
في البداية ماذا نريد ان نفعل ؟!!
كبداية نريد ان نقوم بإرسال طلب لتحويل كود bb to html عبر موقع وعرض صفحة النتائج في اداة WebBrowser
الان وقد حددنا الهدف - نقوم بداية بتنزيل اضافة الفايرفوكس live http headers من هنا
هذه الاضافة السحرية الي تعرض لنا كل مايحصل عندما يقوم المتصفح بإرسال طلب .
نقوم بتنزيلها وتركيبها .
اذهب الى الموقع وقم بفتح نافذة الاضافة
صورة :
هذه نافذة الاضافة
اوقف قنص الطلبات وقم بكتابة النص الذي تريد تحويله في خانة الكود
وقبل ان تضغط تحويل قم بتفعيل القنص
واضغط تحويل ، وفور ظهور صفحة النتائج
قم[/COLOR] بإلغاء القنص
ستكون معلومات الطلب كالتالي :
فسيكون الكود كالتالي
--
--
--
خامسا :- ارسال الطلب
شرح الاكواد السابقة :-
في السطر الاول قمنا بتعريف ترميز وهذا امر ضروري جدا لبيانات الطلب - حيث ان الطلب لايتم اذا كان الترميز خاطئ
<جلب الترميز يتم بعدة طرق منها اليدوية ومنها الالية>
الطربقة الالية هي باستعمال طلب اخر في دالة كالتالي
واستبدال السطر الاول برابط الموقع
الطريقة اليدوية :- موجود في سورس الصفحة نوع الترميز المستخدم ضمن الTag Head
--
السطر الثاني : بيانات الطلب ونحصل عليه في الاضافة (الصورة تحت)
يتم الفصل بين بارمترات البيانات بـ &
فنقوم باستبدال المتغيرات والحفاظ على الثوابت
الكود في الاداة
انا قمت بحذف %5BB%5Dmohammed%5B%2FB%5D
فهذا يعبر عن النص الذي نريد ان نحوله
ووضعت هذا بداله لكي يتم تحويله
--
السطر الثالث
تعريف متغير من نوع مصفوفة byte
ويتم تحويل نص البيانات الى بايتات
لأن عشان نرسل طلب لازم تكون البيانات بصيغة البايت
--
السطر الرابع
إنشاء طلب
وقمنا بوضع رابط الطلب
كما هو موضح رابط الطلب يوجد في اعلى الهيدر للطلب
--
السطر الخامس
البروتوكول المستخدم لإرسال الطلب وهو موجود في الاضافة (الصورة فوق)
--
السطر السادس
كود مهم جدا - ولا يمكن ارسال طلب POST اذا لم يكن موجود
ونقدر نحصل عليه من الاضافة
--
السطر السابع
طول بيانات الطلب = طول مصفوفة البيانات
كود مهم جدا للإرسال POST
--
الكود الثامن
جلب تيار الكتابة لكي نكتب بيانات الطلب
--
الكود التاسع
نكتب بياناتنا
--
الكود العاشر
ارسال الطلب + جلب الرد
--
الكود الحادي عشر
جلب تيار القراءة لكي نقرأ الرد بواسطة دالة مهمة في فئة HttpWebRespons
وهي GetResponseStream
--
الكود الثاني عشر وهو الحاسم
دالةReadToEnd تجلب لك محتوى الرد
ونقوم بعرض المحتوى في اداة الwebbrowser
النتيجة :
تم تحويل
في كود :
الى صيغة الhtml
وذلك عبر ارسال طلب لموقع http://bbcode-to-html.com
-
انتهينا من هذا الجزء (ارسال الطلب)
>لاتقلق اذا لم تفهم ففي جعبتنا العديد من التطبيقات القادمة<
--
--
--
{يتبع الجزء السادس} >>>
نرحب بكم ساداتي الكرام في هذا الشهر الفضيل في اول موضوع من سلسلة [التعامل مع الويب]
تتكون السلسة من 3 مقالات مختلفة تتعلق بالتعامل مع الويب او صفحات الويب
اتت فكرة الموضوع منذ فترة في بالي ، حيث لا يوجد مصدر عربي واحد
يتكلم عن التعامل مع الويب ، فهذا هو الموضوع الاول والحصري
للتعامل مع الطلبات والويب ، في الحقيقة كان من المفترض ان
تكون المقالة على لغتي VB + سي شارب ، ولكن
احس ان السي شارب مظلومة شوي فقررت اجعل الدروس حصريا لها
بالاضافة ان المقالة طويلة نوعا ما فوجود اكواد كثيرة يربك القارئ ويربكني ايضا
إن شاء الله تنفعكم المقالة والمقالات القادمة
ونبدأ معكم اخواني الاعزاء مقالتنا الجميلة.
--
--
--
صفر :- أجزاء المقالة
1- تعريف طلبات الويب (Web requset)
2- بروتوكولات طلبات الويب
3- خصائص وطرق كائن ارسال الطلبات
4- جلب صيغة الطلب
5- ارسال الطلب
6.1- استخدام Cookies Container مع الطلبات
6.2- طريقة استخدام الطلبات لتسجيل الدخول في المنتدى
7- طريقة استخدام الطلبات لرفع البيانات لمراكز الرفع
8- التعامل مع سيرفر الFTP باستخدام كائن ارسال طلبات FTP
9- الخاتمة
--
--
--
اولا :- تعريف الطلب
الطلب هو بيانات ترسلها لخادم الويب(Server) لكي يقوم بعمل ما.
كل طلب يتم ارساله للسيرفر ، يتم استقبال رد (Response) عليه
فاتسجيل الدخول للمنتديات مثلا ، يتم بالضغط على زر Log in في المنتدى
عندما يتم الضغط على الزر ، يرسل المتصفح طلبا يحتوي على بيانات العضوية
يتلقى الخادم الطلب ويعالجه (يبحث في قاعدة البيانات) ويرسل ردا يحتوي على بيانات
يترجم المتصفح الرد ويعرض لك المحتوى المترجم .
سنتعلم ان شاء الله كيفية الاستغناء عن المتصفحات وارسال الطلبات وتلقي الردود وعرض محتوى الرد او معالجته
--
--
--
ثانيا :- بروتوكولات الطلبات
يوجد العديد من البروتوكلات المستخدمة في ارسال الطلبات
ابرزها :-
-
1- Post : وهو البروتوكول الاكثر شيوعا وسنتخدمه كثيرا ،
هذا البروتوكول يستخدم لـ إرسال معلومات من المستخدم الزبون (من form في صفحة html مثلا) للخادم ، مثلا
انشاء موضوع في المنتدى يتطلب ارسال بيانات (العنوان ، نص الموضوع ، الكلمات الدلالية ....الخ)
او تسجيل الدخول للمنتدى ، او البحث -- كل هذا يتم عبر Post Requset
2- Get : وهو بروتوكول يستخدم لعرض طلبك (صورة-ملف-صفحة Html ,وغيرها)
مثلا لو اريد ان اعرض صفحة قوقل الرئيسية ، اقوم بإرسال طلب Get ، ثم يرسل لي الخادم
ردا (Response) يحتوي على اكواد Html للصفحة
3- Head : هو برتوكول مشابه كثيرا لـ Get ،
الـ Get يقوم بجلب طلبك(صورة-صفحة-ملف) مع شيئ اسمه Response header
لكن الـHead يقوم بجلب Response header فقط دون جلب المحتوى - يعني لو اردت
الإستعلام عن مساحة ملف فقط استخدم Head ولا يجوز Get ، لأن Get راح تجلب لي المحتوى ، يعني بتعطينا الBytes للملف
>الـ Response header هي معلومات عن الرد يرسلها لك السيرفر عند تلقي الطلب<
سنتعرف على الـResponse Header و Request Header لاحقا
4- Put : بروتوكول يستخدم لرفع ملف
-
هذي البروتوكولات المشهورة ولاحاجة لذكر غيرها
للمزيد عن هذه البروتولات قم بزيارة الرابط التالي : هنا
--
--
--
ثالثا :- كائن ارسال الطلبات
الفئة السحرية التي تمكننا من ارسال الطلبات اسمها HttpWebRequset ضمن مجال الاسماء System.Net
والفئة التي تمكننا من اسقبال الردود اسمها HttpWebResponse ضمن مجال الاسماء System.Net
هاتان الفئتان كلاهما abstract
اي لايمكنك عمل نسخة منهما
فلتعريفها نكتب التالي :
PHP كود :
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://www.google.com");
قمنا بتعريف كائن وقما بإنشاء طلب.
لاتنسى اضافة مجال الاسماء في اعلى المحرر :
PHP كود :
using System.Net;
--
لن نحاول ان نرسل طلبا الان ، في هذا الجزء من المقالة سنقوم بـ شرح بعض الدوال والخصائص المهمة
--
خصائص كائن ارسال الطلب (HttpWebRequset)
1- خاصية Address : تعطيك رابط الطلب
2- خاصية AllowAutoRedirect : السماح للسيرفر بتحويل رابط الطلب الى رابط اخر
3- خاصية ContentLength : سحب او اعطاء طول بيانات الطلب
4- خاصية ContentType : سحب او اعطاء نوع الطلب - مهم جدا لطلبات بروتوكول POST
5- خاصية CookieContainer : سحب او اعطاء حاوية الكوكيز - سنتعرف لها لاحقا
6- خاصية Credentials : سحب او اعطاء بيانات الوصول مثلا(USERNAME او PASSWORD) - كسيرفرات FTP على سبيل المثال
7- خاصية KeepAlive : سحب او اعطاء قيمة تعبر عن استمرارية الاتصال مع السيرفر - تستعمل عند رفع الملفات عادا كي لاينقطع الاتصال
8- خاصية Method : من اهم الخواص - تستعمل لإختيار البروتوكول المستعمل للطلب (POST, GET , ...etc)
9-خاصية Timeout : الوقت المحدد لإلغاء الطلب في حالة عدم استجابة السيرفر اوعدم وصول الرد في الوقت المحدد
10- خاصية UserAgent : وكيل المستخدم - هو نص يعبر عن المتصفح المستخدم في الطلب (او المنصة الحالية) عادا
تظهر الفائدة الكبرى لهذه الخاصية عندما يكون تطبيقك لعدة منصات فمثلا ، اجهزة الجوال تعرض صفحات الويب بشكل اخر عن الكمبيوتر
جرب تدخل الyoutube من جوالك وشوف ، هنا تم استعمال UserAgent خاص عند طلب فتح صفحة اليوتيوب لكي تعرض بشكل الجوال ، لا بشكل الكمبيوتر المعتاد
--
إجرائات ودوال كائن ارسال الطلب (HttpWebRequset)
1- الاجراء Abort : الغاء الطلب
2- دالة GetRequestStream : فتح تيار كتابة البيانات للطلب - مهم جدا ، فهنا نكتب بيانات الطلب ، كبيانات العضوية او بيانات ملف الخ...
3- دالة GetResponse : ارسال الطلب + جلب الرد ، دالة دائما وابدا تستخدم في الطلب حيث ان الطلب لايتم الى باستدعائها
هكذا انتهينا من الدوال والخصائص المهمة
--
--
--
رابعا :- جلب صيغة الطلب
نبدأ الان الشغل العملي في هذا الجزء
في البداية ماذا نريد ان نفعل ؟!!
كبداية نريد ان نقوم بإرسال طلب لتحويل كود bb to html عبر موقع وعرض صفحة النتائج في اداة WebBrowser
الان وقد حددنا الهدف - نقوم بداية بتنزيل اضافة الفايرفوكس live http headers من هنا
هذه الاضافة السحرية الي تعرض لنا كل مايحصل عندما يقوم المتصفح بإرسال طلب .
نقوم بتنزيلها وتركيبها .
اذهب الى الموقع وقم بفتح نافذة الاضافة
صورة :
هذه نافذة الاضافة
اوقف قنص الطلبات وقم بكتابة النص الذي تريد تحويله في خانة الكود
وقبل ان تضغط تحويل قم بتفعيل القنص
واضغط تحويل ، وفور ظهور صفحة النتائج
قم[/COLOR] بإلغاء القنص
ستكون معلومات الطلب كالتالي :
فسيكون الكود كالتالي
PHP كود :
Encoding charset = Encoding.GetEncoding("iso-8859-1");
string stringData = string.Format("bbcode={0}&submit=Convert+BBCode+to+HTML&alt=yes&xhtml=yes", "[u]ABO MUSLEM[/u]");
byte[] postData = charset.GetBytes(stringData);
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://bbcode-to-html.com");
rq.Method = WebRequestMethods.Http.Post;
rq.ContentType = "application/x-www-form-urlencoded";
rq.ContentLength = postData.Length;
System.IO.Stream wr = rq.GetRequestStream();
wr.Write(postData,0,postData.Length);
wr.Close();
HttpWebResponse rs = (HttpWebResponse)rq.GetResponse();
System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream(), charset);
webBrowser1.DocumentText = reader.ReadToEnd();
--
--
--
خامسا :- ارسال الطلب
شرح الاكواد السابقة :-
في السطر الاول قمنا بتعريف ترميز وهذا امر ضروري جدا لبيانات الطلب - حيث ان الطلب لايتم اذا كان الترميز خاطئ
<جلب الترميز يتم بعدة طرق منها اليدوية ومنها الالية>
الطربقة الالية هي باستعمال طلب اخر في دالة كالتالي
PHP كود :
public Encoding getEncoding(string url)
{
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse rs = (HttpWebResponse)rq.GetResponse();
return Encoding.GetEncoding(rs.CharacterSet);
}
واستبدال السطر الاول برابط الموقع
PHP كود :
Encoding charset = getEncoding("http://bbcode-to-html.com");
الطريقة اليدوية :- موجود في سورس الصفحة نوع الترميز المستخدم ضمن الTag Head
--
السطر الثاني : بيانات الطلب ونحصل عليه في الاضافة (الصورة تحت)
يتم الفصل بين بارمترات البيانات بـ &
فنقوم باستبدال المتغيرات والحفاظ على الثوابت
PHP كود :
string.Format("bbcode={0}&submit=Convert+BBCode+to+HTML&alt=yes&xhtml=yes", "[u]ABO MUSLEM[/u]")
الكود في الاداة
كود :
bbcode=[color=#FF0000]%5BB%5Dmohammed%5B%2FB%5D[/color][color=#40E0D0]&[/color]submit=Convert+BBCode+to+HTML[color=#40E0D0]&[/color]alt=yes[color=#40E0D0]&[/color]xhtml=yes
انا قمت بحذف %5BB%5Dmohammed%5B%2FB%5D
فهذا يعبر عن النص الذي نريد ان نحوله
ووضعت هذا بداله لكي يتم تحويله
PHP كود :
"[u]ABO MUSLEM[/u]"
--
السطر الثالث
PHP كود :
byte[] postData = charset.GetBytes(stringData);
تعريف متغير من نوع مصفوفة byte
ويتم تحويل نص البيانات الى بايتات
لأن عشان نرسل طلب لازم تكون البيانات بصيغة البايت
--
السطر الرابع
PHP كود :
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://bbcode-to-html.com");
إنشاء طلب
وقمنا بوضع رابط الطلب
كما هو موضح رابط الطلب يوجد في اعلى الهيدر للطلب
--
السطر الخامس
PHP كود :
rq.Method = WebRequestMethods.Http.Post;
البروتوكول المستخدم لإرسال الطلب وهو موجود في الاضافة (الصورة فوق)
--
السطر السادس
PHP كود :
rq.ContentType = "application/x-www-form-urlencoded";
كود مهم جدا - ولا يمكن ارسال طلب POST اذا لم يكن موجود
ونقدر نحصل عليه من الاضافة
--
السطر السابع
PHP كود :
rq.ContentLength = postData.Length;
طول بيانات الطلب = طول مصفوفة البيانات
كود مهم جدا للإرسال POST
--
الكود الثامن
PHP كود :
System.IO.Stream wr = rq.GetRequestStream();
جلب تيار الكتابة لكي نكتب بيانات الطلب
--
الكود التاسع
PHP كود :
wr.Write(postData,0,postData.Length);
نكتب بياناتنا
--
الكود العاشر
PHP كود :
HttpWebResponse rs = (HttpWebResponse)rq.GetResponse();
ارسال الطلب + جلب الرد
--
الكود الحادي عشر
PHP كود :
System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream(), charset);
جلب تيار القراءة لكي نقرأ الرد بواسطة دالة مهمة في فئة HttpWebRespons
وهي GetResponseStream
--
الكود الثاني عشر وهو الحاسم
PHP كود :
webBrowser1.DocumentText = reader.ReadToEnd();
دالةReadToEnd تجلب لك محتوى الرد
ونقوم بعرض المحتوى في اداة الwebbrowser
النتيجة :
تم تحويل
PHP كود :
[u]ABO MUSLEM[/u]
PHP كود :
string stringData = string.Format("bbcode={0}&submit=Convert+BBCode+to+HTML&alt=yes&xhtml=yes", "[u]ABO MUSLEM[/u]");
الى صيغة الhtml
PHP كود :
<p><span style="text-decoration: underline;">ABO MUSLEM</span></p>
وذلك عبر ارسال طلب لموقع http://bbcode-to-html.com
-
انتهينا من هذا الجزء (ارسال الطلب)
>لاتقلق اذا لم تفهم ففي جعبتنا العديد من التطبيقات القادمة<
--
--
--
{يتبع الجزء السادس} >>>