Wie würde man ein phpBB3 Forum über einen Python-Skript melden Sie sich mit urllib, urllib2 und ClientCookie?

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

  •  02-07-2019
  •  | 
  •  

Frage

(ClientCookie ist ein Modul für (automatische) Cookie-Behandlung: 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()

Das Skript protokolliert nicht in, sondern scheint eher wieder auf die gleiche Login-Seite zu erhalten umgeleitet es nach einem Benutzernamen und Passwort gefragt. Was mache ich falsch?

Jede Hilfe wäre sehr dankbar! Dank!

War es hilfreich?

Lösung

Haben Sie die Login-Seite versucht, das Abrufen zuerst?

Ich würde vorschlagen, Tamper Data einen Blick zu haben, bei genau das, was gesendet werden werden, wenn Sie die Login-Seite anfordern und dann melden Sie sich in der Regel über einen Webbrowser von einem Neuanfang mit, ohne Anfang Cookies vorhanden, so dass Ihr Skript es genau replizieren kann.

Das ist der Ansatz, den ich verwendet, wenn die folgende Schreiben, aus einem Skript extrahiert, die zu einem Invision Power Board Forum anmelden muss, cookielib und urllib2 mit -. Sie finden es als Referenz nützlich

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)

Andere Tipps

Ich würde empfehlen, einen Blick auf die mechanize Bibliothek; es ist für genau diese Art von Aufgabe entwickelt. Es ist auch viel einfacher, als es von Hand zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top