Como seria um entrar em um fórum phpBB3 através de um script Python usando urllib, urllib2 e ClientCookie?

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

  •  02-07-2019
  •  | 
  •  

Pergunta

(ClientCookie é um módulo para (automático) cookie-manipulação: 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()

O script não entrar, mas parece ser redirecionado de volta para a mesma página de login pedindo-lhe um nome de usuário e senha. O que estou fazendo de errado?

Qualquer ajuda seria muito apreciada! Obrigado!

Foi útil?

Solução

Você tentou buscar a página de login em primeiro lugar?

Gostaria de sugerir usando Tamper Data ter uma espiada no exatamente o que está sendo enviado ao solicitar a página de login e, em seguida, faça o login normalmente usando um navegador web a partir de um novo começo, sem os cookies iniciais no lugar, de modo que seu script pode replicar-lo exatamente.

Essa é a abordagem que eu usei ao escrever o seguinte, extraído a partir de um script que precisa de login para um fórum Board Invision Power, usando cookielib e urllib2 -. Você pode achar que é útil como uma referência

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)

Outras dicas

Eu recomendo dar uma olhada na mecanizar biblioteca ; ele é projetado para precisamente este tipo de tarefa. É também muito mais fácil do que fazê-lo manualmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top