سؤال

في واحدة من الإجابات التي تلقيتها هنا, واجهت مشكلة عدم معرفة كيفية تمرير كيفية تمرير تلقائيا من خلال "محركات تطبيق Google" هويتي وكلمة مرور إلى موقع ويب، حيث أنا مستخدم مسجل ولديه حساب. تم إعطاء اقتراح لي "التحقق من وجود رمز حالة HTTP ل 401،" إذن مطلوب "، وتوفير نوع إذن HTTP (أساسي، هضم، أيا كان) أن الموقع يسأل عن". أنا لا أعرف كيفية التحقق من رمز الحالة. يمكن لأي شخص، من فضلك، قل لي كيف أفعل ذلك؟

+++++++++++++++++++++++++++++++++

معلومة اضافية:

إذا كنت تستخدم هذه الطريقة في محرك تطبيق Google (جلب عنوان URL الخاص بي ملخصي eBay):

from google.appengine.api import urlfetch
url = "http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1&CurrentPage=MyeBaySummary&ssPageName=STRK:ME:LNLK"
result = urlfetch.fetch(url)
if result.status_code == 200:
   print "content-type: text/plain"
   print
   print result.status_code

أحصل دائما على "200" بدلا من "401"

هل كانت مفيدة؟

المحلول

في كود بيثون العادي، ربما استخدم المستوى الأدنى httpleib., ، على سبيل المثال:

import httplib

domains = 'google.com gmail.com appspot.com'.split()

for domain in domains:
  conn = httplib.HTTPConnection(domain)
  conn.request('GET', '/')
  resp = conn.getresponse()
  print 'Code %r from %r' % (resp.status, domain)

سيظهر لك هذا مثل هذه الرموز كما 301 (انتقل بشكل دائم) و 302 (انتقل مؤقتا)؛ مكتبات أعلى مستوى مثل urllib2 من شأنه التعامل مع هذه الأشياء "وراء الكواليس" بالنسبة لك، وهو مفيد ولكن يجعل من الصعب عليك السيطرة على البساطة (عليك تثبيت كائنات "فتح مبتاحة URL الخاصة بك"، إلخ).

في محرك التطبيق، ربما تكون أفضل حالا باستخدام urlfetch., ، الذي يعود كائن الاستجابة مع status_code ينسب. إذا كانت تلك السمة 401، فهذا يعني أنك بحاجة إلى تكرار جلب مع النوع المناسب من معلومات التفويض في الرؤوس.

ومع ذلك، يدعم محرك التطبيق الآن URLLIB2، لذلك إذا كنت مرتاحا باستخدام هذا المستوى الأعلى من التجريد، فيمكنك تفويض العمل إليه. يرى هنا للحصول على برنامج تعليمي حول كيفية تفويض المصادقة الأساسية على Urllib2، و هنا للحصول على برنامج تعليمي عام أكثر حول كيفية عمل المصادقة الأساسية (أعتقد أن فهم ما يحدث في الطبقة السفلية من التجريد يساعدك حتى لو كنت تستخدم الطبقة العليا! -).

نصائح أخرى

ما لم أكن أفهم سؤالك بالكامل، يمكنك الاستيلاء على رمز الإرجاع من كائن الاستجابة باستخدام status_code خاصية.

أولا، سيكون عليك إصدار أحضر() إلى عنوان URL الذي تريد اختباره.

معظم المواقع الموجهة نحو المستخدم لا تستخدم مصادقة HTTP، مفضلا بدلا من استخدام المصادقة المستندة إلى ملفات تعريف الارتباط، مع نماذج HTML ل Signin. إذا كنت ترغب في تكرار هذا في التعليمات البرمجية الخاصة بك، فأنت بحاجة إلى تقديم طلب وظيفة HTTP إلى عنوان URL لتطبيق التطبيق في السؤال، والتقاط ملف تعريف الارتباط الذي تم إرساله مرة أخرى، بما في ذلك ذلك في كل طلباتك المستقبلية لمصادقة نفسك. بدون مزيد من التفاصيل حول الموقع المحدد الذي تحاول المصادقة عليه، من الصعب أن تكون أكثر تحديدا.

لا تحصل على 401 لأن هذا الموقع لا يعود 401 ولكن 200 دائما. عادة ما يعود نوع الترميز الذي نقوم به للحصول على مواقع الويب 200 مع صفحة قائلا "الرجاء تسجيل الدخول ..LAH BLAH"، إذا عاد الموقع أي شيء آخر ثم 200 مستعرض لن يعرض خطأ غير تقليدي MSG.

لذلك باختصار كما ذكرت في سؤال آخر، تحتاج إلى النظر في صفحة تسجيل الدخول، راجع المعارف التي تستخدمها على سبيل المثال تسجيل الدخول = xxx، كلمة المرور = yyy، نشرها إلى تلك الصفحة وستحتاج إلى إدارة ملفات تعريف الارتباط أيضا مكتبة مثل حك وغيرها تأتي في الصورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top