سؤال

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

هنا ما تحتاج إلى القيام به:

  1. هل وظيفة مع عدد قليل من المعلمات رؤوس.
  2. متابعة إعادة توجيه
  3. استرداد HTML الجسم.

الآن, أنا جديدة نسبيا في بيثون ، ولكن اثنين من الأشياء لقد اختبرت حتى الآن لم تنجح.أولا أنا استخدم httplib ، putrequest() (تمرير المعلمات داخل URL) ، putheader().هذا لا يبدو أن تتبع التحويلات.

ثم حاولت urllib و urllib2 ، ويمر كل رؤوس المعلمات كما dicts.ويبدو أن عودة صفحة تسجيل الدخول بدلا من الصفحة أحاول تسجيل الدخول إلى ، أعتقد أنه بسبب عدم وجود ملفات تعريف الارتباط أو ما شابه.

أنا في عداد المفقودين شيء بسيط ؟

شكرا

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

المحلول

التركيز على urllib2 هذا يعمل بشكل جيد جدا.لا تعبث مع httplib, ليس أعلى مستوى API.

ما أنت مشيرا إلى أن urllib2 لا اتبع إعادة توجيه.

تحتاج إلى أضعاف في مثيل HTTPRedirectHandler من شأنها أن قبض ومتابعة عمليات إعادة التوجيه.

كذلك ، قد ترغب فرعية الافتراضي HTTPRedirectHandler لالتقاط المعلومات التي سوف ثم تحقق كجزء من اختبار وحدة.

cookie_handler= urllib2.HTTPCookieProcessor( self.cookies )
redirect_handler= HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)

ثم يمكنك استخدام هذا opener كائن إلى آخر والحصول على, التعامل مع الموجهات و ملفات تعريف الارتباط بشكل صحيح.

قد ترغب في إضافة الخاصة بك فرعية من HTTPHandler التقاط و تسجيل مختلف رموز الخطأ أيضا.

نصائح أخرى

هنا بلدي يأخذ على هذه المسألة.

#!/usr/bin/env python

import urllib
import urllib2


class HttpBot:
    """an HttpBot represents one browser session, with cookies."""
    def __init__(self):
        cookie_handler= urllib2.HTTPCookieProcessor()
        redirect_handler= urllib2.HTTPRedirectHandler()
        self._opener = urllib2.build_opener(redirect_handler, cookie_handler)

    def GET(self, url):
        return self._opener.open(url).read()

    def POST(self, url, parameters):
        return self._opener.open(url, urllib.urlencode(parameters)).read()


if __name__ == "__main__":
    bot = HttpBot()
    ignored_html = bot.POST('https://example.com/authenticator', {'passwd':'foo'})
    print bot.GET('https://example.com/interesting/content')
    ignored_html = bot.POST('https://example.com/deauthenticator',{})

@S. لوت, شكرا لك.اقتراحك عملت بالنسبة لي, مع بعض التعديل.وهنا كيف أنا فعلت هذا.

data = urllib.urlencode(params)
url = host+page
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)

cookies = CookieJar()
cookies.extract_cookies(response,request)

cookie_handler= urllib2.HTTPCookieProcessor( cookies )
redirect_handler= HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)

response = opener.open(request)

كان علي أن أفعل هذا الشيء بالضبط نفسي في الآونة الأخيرة.أنا في حاجة فقط دروس من المكتبة القياسية.هنا مقتطف من التعليمات البرمجية:

from urllib import urlencode
from urllib2 import urlopen, Request

# encode my POST parameters for the login page
login_qs = urlencode( [("username",USERNAME), ("password",PASSWORD)] )

# extract my session id by loading a page from the site
set_cookie = urlopen(URL_BASE).headers.getheader("Set-Cookie")
sess_id = set_cookie[set_cookie.index("=")+1:set_cookie.index(";")]

# construct headers dictionary using the session id
headers = {"Cookie": "session_id="+sess_id}

# perform login and make sure it worked
if "Announcements:" not in urlopen(Request(URL_BASE+"login",headers=headers), login_qs).read():
    print "Didn't log in properly"
    exit(1)

# here's the function I used after this for loading pages
def download(page=""):
    return urlopen(Request(URL_BASE+page, headers=headers)).read()

# for example:
print download(URL_BASE + "config")

كنت أعطي المكننة (http://wwwsearch.sourceforge.net/mechanize/) طلقة.وقد التعامل مع كوكي/رؤوس بشفافية.

محاولة حك - لغة بسيطة التي تسمح للمستخدمين تصفح الويب من واجهة سطر الأوامر.مع حك, يمكنك التنقل من خلال مواقع ويب التي تستخدم أشكال الكوكيز و معظم القياسية ميزات ويب.أكثر لهذه النقطة ، حك هو مكتوب في Python وقد بيثون API, ه.g:

from twill import get_browser
b = get_browser()

b.go("http://www.python.org/")
b.showforms()

بالإضافة إلى حقيقة أن كنت قد يكون في عداد المفقودين كوكي, قد يكون هناك بعض المجال(s) في شكل أنك لم نشر إلى خادم الويب.أفضل طريقة للقبض على الوظيفة الفعلية من مستعرض ويب.يمكنك استخدام LiveHTTPHeaders أو يريشارك سنوب على المرور و تقليد نفس السلوك في السيناريو الخاص بك.

Funkload هو عظيم التطبيق على شبكة الإنترنت أداة اختبار أيضا.فإنه يلتف webunit التعامل مع المتصفح مضاهاة ، ثم يعطيك كل الوظيفية و تحميل اختبار السمات على القمة.

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