문제

하려고 해요 기능을 테스트하는 웹 응용 프로그램의에 의해 스크립트 로그인 시퀀스에서는 파이썬지만,나는 몇 가지 문제입니다.

여기에 내가 무엇을 할 필요가 있다:

  1. 당시와 함께 몇 가지 매개 변수와 합니다.
  2. 따라 리디렉션
  3. 검색 HTML 체.

지금,나는 상대적으로 새로운 python,하지만 두 가지를 내가 지금까지 테스트하지 않은 일.첫 번째 사용존하는 소프트웨어를 돌로,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.Lott, 감사합니다. 당신의 제안은 약간의 수정으로 저에게 효과적이었습니다. 내가 한 방법은 다음과 같습니다.

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/)습니다.그것은 잘 처리하는 쿠키/헤더 제어됩니다.

노력하다 능직 - 사용자가 명령 줄 인터페이스에서 웹을 탐색 할 수있는 간단한 언어. Twill을 사용하면 양식, 쿠키 및 대부분의 표준 웹 기능을 사용하는 웹 사이트를 탐색 할 수 있습니다. 요점에 더, 능직 작성되었습니다 Python 그리고 파이썬 API, EG :

from twill import get_browser
b = get_browser()

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

쿠키가 없을 수 있다는 사실 외에도 웹 서버에 게시하지 않는 형태의 일부 필드가있을 수 있습니다. 가장 좋은 방법은 웹 브라우저에서 실제 게시물을 캡처하는 것입니다. 당신이 사용할 수있는 LivehttPheaders 또는 Wireshark 트래픽을 스누핑하고 스크립트에서 동일한 동작을 모방합니다.

펑크로드 훌륭한 웹 앱 테스트 도구이기도합니다. 브라우저 에뮬레이션을 처리하기 위해 WebUnit을 랩핑 한 다음 기능 및로드 테스트 기능을 모두 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top