urllib, urllib2 및 ClientCookie를 사용하여 Python 스크립트를 통해 phpBB3 포럼에 로그인하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/112768

  •  02-07-2019
  •  | 
  •  

문제

(ClientCookie는 (자동) 쿠키 처리를 위한 모듈입니다. http://wwwsearch.sourceforge.net/ClientCookie)

# I encode the data I'll be sending:
data = urllib.urlencode({'username': 'mandark', 'password': 'deedee'})

# And I send it and read the page:
page = ClientCookie.urlopen('http://www.forum.com/ucp.php?mode=login', data)
output = page.read()

스크립트는 로그인하지 않지만 사용자 이름과 비밀번호를 요구하는 동일한 로그인 페이지로 다시 리디렉션되는 것 같습니다.내가 도대체 ​​뭘 잘못하고있는 겁니까?

어떤 도움이라도 대단히 감사하겠습니다!감사해요!

도움이 되었습니까?

해결책

먼저 로그인 페이지를 가져오셨나요?

나는 사용하는 것이 좋습니다 데이터 조작 로그인 페이지를 요청할 때 전송되는 내용을 정확히 엿본 다음 초기 쿠키 없이 처음부터 웹 브라우저를 사용하여 정상적으로 로그인하면 스크립트가 이를 정확하게 복제할 수 있습니다.

이것이 내가 다음을 작성할 때 사용한 접근 방식이며, cookielib 및 urllib2를 사용하여 Invision Power Board 포럼에 로그인해야 하는 스크립트에서 추출되었습니다. 참조로 유용할 수 있습니다.

import cookielib
import logging
import sys
import urllib
import urllib2

cookies = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
urllib2.install_opener(opener)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12',
    'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
    'Accept-Language': 'en-gb,en;q=0.5',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
}

# Fetch the login page to set initial cookies
urllib2.urlopen(urllib2.Request('http://www.rllmukforum.com/index.php?act=Login&CODE=00', None, headers))

# Login so we can access the Off Topic forum
login_headers = headers.copy()
login_headers.update({
    'Referer': 'http://www.rllmukforum.com/index.php?act=Login&CODE=00',
    'Content-Type': 'application/x-www-form-urlencoded',
})
html = urllib2.urlopen(urllib2.Request('http://www.rllmukforum.com/index.php?act=Login&CODE=01',
                                       urllib.urlencode({
                                           'referer': 'http://www.rllmukforum.com/index.php?',
                                           'UserName': RLLMUK_USERNAME,
                                           'PassWord': RLLMUK_PASSWORD,
                                       }),
                                       login_headers)).read()
if 'The following errors were found' in html:
    logging.error('RLLMUK login failed')
    logging.info(html)
    sys.exit(1)

다른 팁

나는 다음을 살펴 보는 것이 좋습니다. 기계화하다 도서관;이는 바로 이러한 유형의 작업을 위해 설계되었습니다.손으로 하는 것보다 훨씬 쉽습니다.

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