Bonjour,
J'essaye de récupérer le contenu d'une page qui requiert une authentification HTTP.
La première méthode ne fonctionne pas. Pourtant, je l'ai trouvé plusieurs fois sur le net et surtout dans le livre "Programmation Python" de Tarek Ziadé.
La méthode 2, elle fonctionne correctement.
Du coup, je me pose la question suivante: est ce que la méthode 1 est mauvaise, obsolète (le livre est un peu vieux mais je croyais que si cela fonctionnait en 2.3 cela fonctionnait en 2.5) ou tout simplement j'ai fait du grand n'importe quoi ?
Méthode 1:
baseurl = 'localhost/gestion_site/'
baseurlwithoutproto = 'localhost/gestion_site/'
myurl = 'localhost/gestion_site/index.php'
username = 'mathieu'
password = 'mathieu'
handler = urllib2.HTTPBasicAuthHandler()
handler.add_password(None, baseurlwithoutproto, username, password)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(myurl)
for line in pagehandle.readlines()[:5]:
print line
Méthode 2:
baseurl = 'localhost/gestion_site/'
baseurlwithoutproto = 'localhost/gestion_site/'
myurl = 'localhost/gestion_site/index.php'
username = 'mathieu'
password = 'mathieu'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, baseurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler,urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(myurl)
for line in pagehandle.readlines()[:5]:
print line
Merci de votre aide.
A bientôt.
# j'utilise plutôt mechanize et beautifulsoup un exemple
Posté par palm123 (site web personnel) . Évalué à 2.
# -*- coding: utf-8 -*-
import smtplib
import mechanize, cookielib, re, sys
from optparse import OptionParser
from urllib2 import HTTPError, URLError
import urllib, socket
import BeautifulSoup
def stat(date, verbose):
br = mechanize.Browser()
if verbose:
br.set_debug_redirects(True)
br.set_debug_http(True)
br.addheaders = [ ('User-agent', 'Firefox') ]
try:
br.open("http://blogiwi.com")
#except URLError, res:(site en maintenance)
# email['Subject']='probleme lors de la connexion sur http://hydro.blogiwi.com'
except IOError, e:
send('x@gmail.com','x@gmail.com')
if hasattr(e, 'reason'):
print 'Nous avons échoué à joindre le serveur.'
print 'Raison: ', e.reason
elif hasattr(e, 'code'):
print 'Le serveur n\'a pu satisfaire la demande.'
print 'Code d\' erreur : ', e.code
# print res.code, res.msg
# print res.read()
br.select_form(nr=0)
br["pseudo"] = "hydro"
br["mdp"] = "motdepassedehydro"
try:
response1 = br.submit()
except HTTPError, res:
email['Subject']='probleme lors de la connexion avec le couple user pass '
send('x@gmail.com','x@gmail.com')
print res.code, res.msg
print res.read()
content = response1.read()
try:
response2 = br.follow_link(text='Gestion')
except HTTPError, res:
email['Subject']='probleme lors de la connexion sur le lien Gestion'
send('x@gmail','x@gmail.com')
print res.code, res.msg
print res.read()
# ...
html = response5.read()
s = BeautifulSoup.BeautifulSoup(html)
for tr in s.fetch('tr')[1:]:
# print t
td = tr.fetch('td')[0]
if td.string is None:
cg=td.childGenerator()
cg.next()
print cg.next().string[2:-1]
else:
print td.string
response5.close()
def main():
timeout = 30
socket.setdefaulttimeout(timeout)
cookiejar = cookielib.CookieJar()
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-d", "--date", dest="date",
help="report for this day")
parser.add_option("-t", "--timeout", dest="timeout",type="int",default=30,
help="socket timeout in seconds")
parser.add_option("-q", "--quiet",
action="store_false", dest="quiet", default=True,
help="don't print status messages to stdout")
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False,
help="make lots of noise [default]")
(options, args) = parser.parse_args()
filename = options.filename
date = options.date
verbose = options.verbose
quiet = options.quiet
timeout = options.timeout
print ' date vaut : ',date
print ' verbose vaut : ',verbose
print ' timeout vaut : ',timeout
stat(date, verbose)
if __name__ == '__main__':
main()
ウィズコロナ
# peut-être le pourquoi du comment ?
Posté par s[e]th & h[o]lth (site web personnel) . Évalué à 2.
http://www.voidspace.org.uk/python/articles/authentication.s(...)
# Merci pour ses informations.
Posté par sifu . Évalué à 1.
base_url doit contenir le http://
realm ne doit pas être None
handler = urllib2.HTTPBasicAuthHandler()
handler.add_password(realm='Acces restreint', uri= baseurl, user=username, passwd=password)
opener = urllib2.build_opener(handler, urllib2.HTTPHandler(debuglevel=1))
print opener.open(myurl).read()
Du coup, cela fonctionne !!!
Merci pour votre aide et désolé pour le bruit.
A bientôt !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.