اشكال مجنونه وصف كائن الاستجابة استجابات غير صالحة html

لنفترض أننا بحاجة إلى الحصول على بيانات من موقع ويب، حيث يكون جمعها يدويًا غير عملي أو مستحيل بسبب حجمها. في هذه الحالة، يمكننا أتمتة العملية باستخدام الأدوات الموضحة أدناه.

مكتبة الطلبات

مكتبة بايثون لتقديم الطلبات إلى الخادم ومعالجة الاستجابات. أساس نص التحليل وسلاحنا الرئيسي. باستخدام هذه المكتبة، نتلقى محتويات الصفحة في شكل HTML لمزيد من التحليل.

استجابة طلبات الاستيراد = الطلبات . get ("https://ya.ru") # طباعة طلب الحصول (response . text) # محتويات صفحة الإخراج payload = ( "key1" : "value1" , "key2" : "value2" ) الاستجابة = الطلبات . get ("http://httpbin.org/get" , params = payload ) # طلب ذو معلمات headers = ( "user-agent" : "my-app/0.0.1") Response = requests . الحصول على (url, headers = headers) # طلب برؤوس html محددة

واجهة برمجة التطبيقات

واجهة برمجة التطبيقات – واجهة برمجة التطبيقات التي يقدمها مالك تطبيق الويب للمطورين الآخرين. إن عدم وجود واجهة برمجة تطبيقات يمكنها تلبية احتياجاتنا هو أول شيء يجب أن نتأكد منه قبل التسرع في تحليل الكود المصدري للصفحة وكتابة محلل لها. تحتوي العديد من المواقع الشهيرة على واجهة برمجة التطبيقات (API) الخاصة بها والوثائق التي تشرح كيفية استخدامها. يمكننا استخدام واجهة برمجة التطبيقات بهذه الطريقة - نقوم بتكوين طلب http وفقًا للوثائق، ونتلقى استجابة باستخدام الطلبات.

بي أس 4

Beautifulsoup4 هي مكتبة لتحليل مستندات html وxml. يسمح لك بالوصول مباشرة إلى محتوى أي علامات في HTML.

من bs4 import BeautifulSoup Soup = BeautifulSoup (raw_html, "html.parser") print (soup . find ( "p" , class_ = "some-class" ) . text ) # إخراج محتويات العلامة "p" مع الفصل "بعض الطبقة"

برنامج تشغيل الويب السيلينيوم

يمكن إنشاء البيانات الموجودة على الموقع ديناميكيًا باستخدام جافا سكريبت. في هذه الحالة، لن يكون من الممكن تحليل هذه البيانات باستخدام request+bs4. الحقيقة هي أن bs4 يقوم بتحليل الكود المصدري للصفحة دون تنفيذ js. لتنفيذ كود JS والحصول على صفحة مماثلة لتلك التي نراها في المتصفح، يمكنك استخدام برنامج تشغيل الويب السيلينيوم - هذه مجموعة من برامج التشغيل لمتصفحات مختلفة، مزودة بمكتبات للعمل مع برامج التشغيل هذه.

ماذا تفعل إذا كان هناك إذن؟

جلسة = طلبات. بيانات الجلسة () = ("login_username": "login"، "login_password": "password") url = "http://site.com/login.php" Response = session.post(url، data) = البيانات)

ماذا لو قام أحد المواقع بحظرك بسبب عدد كبير جدًا من الطلبات؟
  • ضبط التأخير بين الطلبات:

الاستجابة = request.get(url, timeout=(10, 0.01)) # مهلة الاتصال، مهلة القراءة (بالثواني)

  • التظاهر بأنك متصفح يستخدم برنامج تشغيل الويب السيلينيوم أو يمرر محتويات رأس وكيل المستخدم عند تقديم طلب:

user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " ""Gecko/20100101 Firefox/50.0") request = Requests.get(url, headers=("User-Agent":user_agent))

  • استخدام بروكسي:

بعد تلقي رسالة طلب وتفسيرها، يستجيب الخادم برسالة استجابة HTTP:

  • خط الحالة
  • صفر أو أكثر من حقول الرأس (عام|الاستجابة|الكيان) متبوعة بـ CRLF
  • سطر فارغ (أي سطر لا يسبقه أي شيء CRLF) يشير إلى نهاية حقول الرأس
  • اختياريا نص الرسالة
  • تشرح الأقسام التالية الكيانات المستخدمة في رسالة استجابة HTTP.

    خط حالة الرسالة

    يتكون سطر الحالة من إصدار البروتوكول متبوعًا برمز الحالة الرقمي والعبارة النصية المرتبطة به. يتم فصل العناصر بمسافات SP.

خط الحالة = إصدار HTTP SP، رمز الحالة SP، عبارة السبب، إصدار HTTP CRLF

سيُرجع الخادم الذي يدعم الإصدار 1.1 من HTTP معلومات الإصدار التالية:

إصدار HTTP = HTTP/1.1

رمز الحالة

عنصر رمز الحالة عبارة عن عدد صحيح مكون من 3 أرقام حيث يحدد الرقم الأول من رمز الحالة فئة الاستجابة ولا يحتوي الرقمان الأخيران على أي دور تصنيف. هناك 5 قيم للرقم الأول:

س.ن. الكود والوصف
1 1xx: معلوماتية

وهذا يعني أنه تم استلام الطلب وأن العملية مستمرة.

2 2xx: النجاح

وهذا يعني أنه تم استلام الإجراء وفهمه وقبوله بنجاح.

3 3xx: إعادة التوجيه

وهذا يعني أنه يجب اتخاذ المزيد من الإجراءات لإكمال الطلب.

4 4xx: خطأ في العميل

وهذا يعني أن الطلب يحتوي على بناء جملة غير صحيح أو لا يمكن تحقيقه.

5 5xx: خطأ في الخادم

وهذا يعني أن الخادم فشل في تلبية طلب صالح على ما يبدو.

رموز حالة HTTP قابلة للتوسيع ولا يُطلب من تطبيقات HTTP فهم معنى جميع رموز الحالة المسجلة. تم تقديم قائمة بجميع رموز الحالة في فصل منفصل للرجوع إليها.

حقول رأس الاستجابة

سندرس الرأس العام ورأس الكيان في فصل منفصل عندما نتعلم حقول رأس HTTP. في الوقت الحالي، دعونا نتحقق من حقول رأس الاستجابة.

تسمح حقول رأس الاستجابة للخادم بتمرير معلومات إضافية حول الاستجابة والتي لا يمكن وضعها في سطر الحالة. توفر حقول الرأس هذه معلومات حول الخادم وحول الوصول الإضافي إلى المورد المحدد بواسطة Request-URI.

  • مصادقة الوكيل

  • مصادقة WWW

يمكنك تقديم الحقول المخصصة الخاصة بك في حالة قيامك بكتابة عميل الويب والخادم المخصصين الخاصين بك.

أمثلة على رسالة الرد

الآن دعونا نجمع كل ذلك معًا لتكوين استجابة HTTP لطلب جلب صفحة hello.htm من خادم الويب الذي يعمل في الموقع

HTTP/1.1 200 OK التاريخ: الاثنين، 27 يوليو 2009 12:28:53 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) آخر تعديل: الأربعاء، 22 يوليو 2009 19:15:56 بتوقيت جرينتش طول المحتوى: 88 محتوى- النوع: نص/html الاتصال: مغلق أهلاً بالعالم!

يوضح المثال التالي رسالة استجابة HTTP تعرض حالة الخطأ عندما يتعذر على خادم الويب العثور على الصفحة المطلوبة:

HTTP/1.1 404 لم يتم العثور عليه التاريخ: الأحد، 18 أكتوبر 2012 10:36:20 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) طول المحتوى: 230 الاتصال: مغلق نوع المحتوى: نص/html؛ مجموعة الأحرف=iso-8859-1 404 لم يتم العثور عليها لم يتم العثور عليها

لم يتم العثور على عنوان URL المطلوب /t.html على هذا الخادم.

ما يلي هو مثال لرسالة استجابة HTTP التي تظهر حالة الخطأ عندما واجه خادم الويب إصدار HTTP خاطئًا في طلب HTTP المحدد:

HTTP/1.1 400 تاريخ الطلب السيئ: الأحد، 18 أكتوبر 2012، الساعة 10:36:20 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) طول المحتوى: 230 نوع المحتوى: نص/html؛ charset=iso-8859-1 الاتصال: مغلق 400 طلب سيء طلب سيء

أرسل متصفحك طلبًا لم يتمكن هذا الخادم من فهمه.

يحتوي سطر الطلب على أحرف غير صالحة تتبع سلسلة البروتوكول.

الكائن الموصوف هو أداة مفيدة وقوية للغاية. يحتوي هذا الكائن على عدة طرق، ويرد وصفها أدناه:

المجموعات: طُرق: ملكيات: الاستجابة. جمع ملفات تعريف الارتباط

تقوم مجموعة ملفات تعريف الارتباط بتعيين قيم لملفات تعريف الارتباط. إذا كانت ملفات تعريف الارتباط المحددة غير موجودة، فسيتم إنشاؤها. إذا كان ملف تعريف الارتباط موجودًا، فإنه يأخذ قيمة جديدة ويدمر القيمة القديمة.

Response.Cookies(ملف تعريف الارتباط) [(مفتاح) | . السمات ] = القيمة

خيارات:

  • ملف تعريف الارتباط - اسم ملف تعريف الارتباط
  • المفتاح - المعلمة الاختيارية. إذا تم تحديده، فإن ملف تعريف الارتباط هو دليل (متداخل) والمفتاح عبارة عن مجموعة من القيم.
  • السمات - معلومات محددة حول ملفات تعريف الارتباط نفسها. يمكن أن تكون هذه المعلمة واحدة مما يلي:
  • القيمة - تحدد القيمة التي سيتم تعيينها لهذا المفتاح أو السمة.
اسموصف
اِختِصاصالتسجيل فقط. إذا تم تحديدها، يتم إرسال ملفات تعريف الارتباط فقط عند الطلب من هذا المجال.
تنتهيالتسجيل فقط. التاريخ الذي تنتهي فيه صلاحية ملف تعريف الارتباط. ويجب تعيين هذا التاريخ حتى تتم كتابة ملفات تعريف الارتباط على القرص الصلب الخاص بالعميل بعد انتهاء الجلسة. إذا لم يتم تعيين هذه السمة، فمن المفترض أن يكون تاريخ انتهاء صلاحية ملف تعريف الارتباط هو التاريخ الحالي. ستنتهي صلاحية ملفات تعريف الارتباط فور انتهاء الجلسة.
هاسكيالقراءة فقط. يشير إلى ما إذا كان ملف تعريف الارتباط يحتوي على المفتاح المحدد.
طريقالتسجيل فقط. إذا تم تحديدها، فسيتم إرسال ملفات تعريف الارتباط فقط عند الطلب من هذا المسار. إذا لم يتم تعيين المعلمة، فسيتم استخدام المسار إلى التطبيق.
يؤمنالتسجيل فقط. يشير إلى ما إذا كانت ملفات تعريف الارتباط ستكون محمية أم لا.

تعليق:

إذا تم إنشاء ملف تعريف الارتباط الرئيسي كما هو موضح في البرنامج النصي التالي،

ثم سيتم إرسال الرأس التالي:

مجموعة ملفات تعريف الارتباط:MYCOOKIE=TYPE1=sugar&TYPE2=ملفات تعريف الارتباط

إذا قمت بتعيين قيمة لملف mycookie دون استخدام المفاتيح، فسيؤدي هذا الإجراء إلى تدمير مفاتيح النوع 1 والنوع 2. على سبيل المثال:

في المثال السابق، سيتم تدمير المفتاحين type1 وtype2 وفقدان قيمهما. سيحتوي Mycookie الآن على شوكولاتة المارشميلو القيمة.

يمكنك أيضًا التحقق من وجود مفتاح معين بالطريقة التالية:

إذا تم عرض TRUE، فهذا يعني أن هذا المفتاح موجود؛ وإذا تم عرض FALSE، فلن يكون موجودًا.

طريقة الرد.الكتابة

الاستجابة.اكتب متغير_أو_قيمة

خيارات:

  • variable_or_value - البيانات التي سيتم عرضها على شاشة المتصفح عبر HTML. يمكن أن تكون هذه المعلمة من أي نوع معتمد بواسطة VisualBasic Scripting Edition. أي أن البيانات يمكن أن تكون من الأنواع التالية: التاريخ، السلسلة، الحرف، القيم الرقمية. لا يمكن أن تحتوي قيمة هذه المعلمة على المجموعة %>. بدلاً من ذلك، يمكنك استخدام التركيبة المكافئة %\>. سيقوم خادم الويب بتحويل هذا التسلسل إلى التسلسل المطلوب عند تنفيذ البرنامج النصي.

يوضح المثال التالي كيفية عمل أسلوب Response.write لإخراج رسالة إلى العميل.

سأقول لك فقط: واسمك

يضيف المثال التالي علامة HTML إلى صفحة ويب. وبما أن هذه الطريقة لا يمكن أن تحتوي على المجموعة %>، فإننا نستخدم التسلسل %\>. إذن مثال على البرنامج النصي:

سيكون الإخراج هو السطر:

طريقة الاستجابة.إعادة التوجيه

عنوان URL الخاص بإعادة التوجيه (عنوان URL - محدد موقع الموارد الموحد)

خيارات:

  • URL - المعلمة عبارة عن واصف مورد عالمي. يظهر عندما يحتاج المتصفح إلى إعادة التوجيه.

تعليق:

سيتم تجاهل أي حدوث لهذه الطريقة بين العلامات وصفحة الويب. لا يمكن استخدام هذه الطريقة إلا في رأس صفحة HTML. ستقوم هذه الطريقة بتمرير رأس إلى المتصفح إذا كانت معلمة URL لهذا الكائن مفقودة بالشكل التالي:

HTTP/1.0 302 عنوان URL لموقع الكائن المنقول

طريقة الاستجابة. النهاية

الاستجابة.النهاية

تعليق:

إذا تم تعيين الخاصية Response.Buffer على TRUE، فسيؤدي استدعاء الأسلوب Response.End إلى مسح المخزن المؤقت، ودفع البيانات خارجه إلى العميل. إذا كنت لا تريد إخراج البيانات إلى المستخدم، فيجب عليك استدعاء الطريقة التالية:

طريقة الاستجابة. AddHeader

تضيف طريقة AddHeader رأس HTML بقيم محددة. تضيف هذه الطريقة دائمًا رأسًا جديدًا للاستجابة لمتصفح العميل. لا تستبدل هذه الطريقة الرأس الحالي برأس جديد. لا يمكن إزالة الرأس المضاف.

تُستخدم هذه الطريقة فقط للمهام "المتقدمة".

Response.AddHeader اسم متغير، قيمة

خيارات:

  • variable_name - اسم معلمات رأس HTML الجديدة.
  • value - قم بتعيين القيمة التي سيتم تذكرها في الرأس.
ملحوظات:

لكي يعمل الأسلوب بشكل صحيح، يجب ألا يحتوي اسم المتغير على الشرطة السفلية (_). تفسر مجموعة ServerVariables الشرطة السفلية على أنها شرطة في الرأس. على سبيل المثال، يفرض البرنامج النصي التالي على الخادم العثور على معلمة من رأس HTML تسمى MY-HEADER.

نظرًا لأن بروتوكول HTTP يتطلب تمرير كافة معلمات الرأس قبل النص الأساسي لصفحة HTML، فيجب عليك استدعاء أسلوب AddHeader في البرنامج النصي الخاص بك قبل بدء الوصف.... هناك استثناء واحد. إذا تم تعيين الخاصية Buffer على true، فيمكنك كتابة AddHeader في أي مكان في البرنامج النصي، ولكن قبل الاستدعاء الأول لأسلوب Flush. وإلا فإن استدعاء الأسلوب AddHeader سيؤدي إلى ظهور خطأ.

يوضح الملفان .ASP التاليان هذه النقطة الأخيرة.

النص الخاص بك على الصفحة

في هذا المثال، لم يتم تخزين الصفحة مؤقتًا. يعمل البرنامج النصي ولكن يتم استدعاء AddHeader قبل أن يقوم الخادم بإنتاج مخرجات HTML للعميل.

إليكم بعض المعلومات من صفحتكم...

في المثال الثاني، يتم تخزين الصفحة مؤقتًا، ونتيجة لذلك، لا يقوم الخادم بإخراج النص إلى العميل حتى ينتهي البرنامج النصي نفسه أو تتم مواجهة أسلوب Flush. يمكنك استخدام هذه الطريقة لإرسال نسخ متعددة من بعض معلمات الرأس بقيم مختلفة، كما هو الحال مع رأس WWW-Authenticate.

أسلوب Response.AppendToLog

تضيف طريقة AppendToLog سطرًا إلى نهاية ملف التقرير (ملف السجل) لخادم الويب. يمكنك استدعاء هذه الطريقة عدة مرات حسب حاجتك. في كل مرة تقوم فيها باستدعاء الطريقة، ستتم كتابة السلسلة التي تحددها إلى ملف تقرير الخادم.

قيمة Response.AppendToLog

خيارات:

  • القيمة - النص الذي سيتم إضافته إلى ملف تقرير خادم الويب. لا يمكن أن تحتوي هذه السلسلة على حرف الفاصلة (،). علاوة على ذلك، يجب ألا يتجاوز إجمالي طول السطر المضاف 80 حرفًا.
ملحوظات:

لاستخدام هذه الميزة، يجب عليك تمكين خيار URI Query في لوحة "خصائص التسجيل المتقدمة" لخادم الويب هذا في IIS.

طريقة Response.BinaryWrite

تتيح لك طريقة BinaryWrite كتابة معلومات محددة إلى مخرجات HTTP الحالية دون أي تحويل للأحرف. تعتبر هذه الطريقة مفيدة لإخراج المعلومات غير النصية، مثل البيانات الثنائية التي يتطلبها التطبيق.

بيانات الاستجابة.BinaryWrite

خيارات:

  • البيانات - البيانات المخصصة لإخراج HTTP.

إذا كان لديك كائن ينتج مصفوفة بايت، فيمكنك استخدام الاستدعاء التالي لهذه الطريقة لتمرير هذه المصفوفة إلى بعض التطبيقات التي تعمل على جهاز العميل.

الاستجابة.طريقة واضحة

تقوم الطريقة Clear بمسح كافة مخرجات HTML المخزنة مؤقتًا. ومع ذلك، لا تقوم هذه الطريقة بمسح معلومات المخزن المؤقت المرتبطة بالرأس. يمكنك استخدام هذه الطريقة لإدارة الأخطاء. ومع ذلك، فإن تنفيذ هذا الأسلوب سيؤدي إلى حدوث خطأ إذا كانت الخاصية Response.Buffer غير صحيحة.

خاصية Response.CacheControl

تتجاوز هذه الخاصية القيمة الافتراضية. عندما تقوم بتعيين الخاصية إلى عامة، يمكن للخادم الوكيل تخزين المخرجات التي تم إنشاؤها بواسطة ASP مؤقتًا.

Response.CacheControl [= رأس التحكم في ذاكرة التخزين المؤقت]

خيارات:

  • رأس التحكم في ذاكرة التخزين المؤقت - يمكن أن يكون خيار التحكم في الرأس هذا عامًا أو خاصًا.
الخاصية Response.CharSet

تتيح لك خاصية CharSet إضافة اسم جدول رموز الأحرف (على سبيل المثال، WINDOWS-1251) إلى رأس HTML، سطر نوع المحتوى.

Response.CharSet code_table_name

خيارات:

  • charset_name - سلسلة تحدد مجموعة الأحرف لصفحة HTML هذه. ستتم إضافة اسم جدول التعليمات البرمجية هذا إلى رأس ملف HTML ضمن معلمة "نوع المحتوى".

بالنسبة لصفحة ASP التي لا تستخدم الخاصية Response.Charset، ستكون المعلمة "نوع المحتوى" في الرأس كما يلي:

نوع المحتوى: نص/أتش تي أم أل

إذا كان ملف ASP يحتوي على الأمر

ثم سيبدو حقل نوع المحتوى في الرأس

نوع المحتوى: نص/أتش تي أم أل؛ مجموعة الأحرف = Windows-1251

تعليق:

تقوم هذه الوظيفة بإدراج أي سطر في الرأس ولا تتحقق من صلاحيته.

إذا كانت الصفحة تحتوي على عدة علامات Response.Charset، فستستبدل كل علامة لاحقة القيمة بقيمتها الخاصة.

خاصية Response.ContentType

تتيح لك خاصية ContentType تحديد نوع (نوع) محتوى ملف HTML. إذا لم يتم استخدام هذه الخاصية، فسيتم أخذ text/html بشكل افتراضي.

Response.ContentType [=content_type]

خيارات:

  • content_type - سلسلة تصف نوع محتوى HTML. تأخذ هذه السلسلة عادة شكل "النوع/النوع الفرعي"، حيث النوع هو الفئة الرئيسية للمحتوى والنوع الفرعي يشير إلى نوع المحتوى. للحصول على قائمة كاملة بالأنواع المدعومة، راجع وثائق المتصفح الخاص بك أو مواصفات HHTP.

يوضح المثال التالي ضبط نوع المحتوى على تنسيق تعريف القناة (قنوات الدفع).

يوضح المثال الثاني تعيين خاصية إلى القيم الأكثر شيوعاً.

الاستجابة.انتهاء صلاحية الخاصية

تحدد خاصية انتهاء الصلاحية الفترة الزمنية حتى تعتبر صفحة HTML المخزنة مؤقتًا بواسطة المتصفح غير منتهية الصلاحية (فترة التخزين). إذا طلب المستخدم صفحة مخبأة من المتصفح لم تنته صلاحيتها، فسيقوم المتصفح بإعادتها مباشرة من ذاكرة التخزين المؤقت الخاصة به.

الاستجابة.انتهاء الصلاحية [=الرقم]

خيارات:

  • الرقم - يعتبر مقدار الوقت بالدقائق قبل الصفحة "متأخرًا". يؤدي تعيين هذه القيمة إلى 0 إلى أن تصبح الصفحة المحددة "منتهية الصلاحية" على الفور.

تعليق:

إذا تم تعيين هذه الخاصية أكثر من مرة على الصفحة، فسيتم استخدام القيمة الأصغر.

خاصية Response.ExpiresAbsolute

تحدد الخاصية ExpiresAbsolute الوقت والتاريخ الذي تعتبر بعده صفحة HTML التي تم تخزينها مؤقتًا بواسطة المتصفح منتهية الصلاحية (انتهت فترة الاستبقاء). إذا طلب المستخدم صفحة مخبأة من المتصفح لم تنته صلاحيتها، فسيقوم المتصفح بإعادتها مباشرة من ذاكرة التخزين المؤقت الخاصة به. إذا تم تحديد الوقت (والتاريخ محدد)، فإن "تاريخ انتهاء الصلاحية" لهذه الصفحة سينتهي عند منتصف ليل ذلك اليوم. إذا لم يتم تحديد الوقت أو التاريخ، فسيتم تعيين القيمة وفقًا لليوم والوقت الذي تم فيه تشغيل البرنامج النصي.

الاستجابة.انتهاء الصلاحية المطلقة [= [التاريخ] [الوقت]]

خيارات:

  • التاريخ - يشير إلى تاريخ انتهاء "مدة الصلاحية". يجب أن يتوافق تنسيق التاريخ مع معيار RFC-1123.
  • الوقت - يشير إلى الوقت الذي تنتهي فيه صلاحية الصفحة. يتم تحويل هذه القيمة إلى تنسيق GMT (توقيت جرينتش) قبل إرسال الرأس إلى العميل.

تعليق:

إذا تم تعريف خاصية معينة أكثر من مرة على الصفحة، فسيتم اعتبار وقت انتهاء "فترة التخزين" هو الأقدم من بين جميع القيم المحددة.

الخاصية Response.IsClientConnected

هذه الخاصية للقراءة فقط، مما يعني أنه لا يمكن تعيين أي قيم لهذه الخاصية. تشير هذه الخاصية إلى ما إذا كان العميل متصلاً أو لم يعد متصلاً بالخادم المحدد في الرد الأخير من Response.Write.

Response.IsClientConnected()

تعليق:

تتيح لك هذه الخاصية تحديد متى يكون المستخدم متصلاً ومتى يتم قطع اتصاله بالخادم. على سبيل المثال، طول الفترة الزمنية بين وقت استجابة الخادم ووقت تقديم العميل للطلب يعطي الثقة بأن العميل لا يزال متصلاً ومن المنطقي الاستمرار في تنفيذ البرنامج النصي.