OVH Cloud OVH Cloud

httplib et php

4 réponses
Avatar
Jonathan Barnoud
J'ai besoin pour un script de récupérer une page web.
J'ai pensé dans un premier temps utiliser les outils du systeme et
télécharger la page en question avec wget (je suis sous linux) :

import os
url="http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems"
os.system("wget "+url)
os.system("mv wakka.php?wiki=ListeDeTousLesItems wakka.php")
doc = open("wakka.php","r")
doc = doc.read()
print doc

Ça marche nickel sauf que le scipt est amené à petre utiliser pas des
windowsiens et que tel quel c'est pas terrible côté portabilité.

J'ai donc voulu utiliser httplib :

import httplib
conn = httplib.HTTPConnection("exolandia.be")
conn.request("GET", "/doc/wikini/wakka.php?wiki=ListeDeTousLesItems")
r1 = conn.getresponse()
print r1.status, r1.reason
doc = r1.read()
conn.close()
print doc

et je récupère :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A
HREF="http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.33 Server at www.exolandia.be Port 80</ADDRESS>
</BODY></HTML>

au lieu de la page demandée.
Comment contourner ça ? Httplib ne peut pas récupérer de page php ??

Merci de toute aide,

Jonathan Barnoud

4 réponses

Avatar
Wilk
Jonathan Barnoud writes:

J'ai besoin pour un script de récupérer une page web.
J'ai pensé dans un premier temps utiliser les outils du systeme et
télécharger la page en question avec wget (je suis sous linux) :

import os
url="http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems"
os.system("wget "+url)
os.system("mv wakka.php?wiki=ListeDeTousLesItems wakka.php")
doc = open("wakka.php","r")
doc = doc.read()
print doc

Ça marche nickel sauf que le scipt est amené à petre utiliser pas des
windowsiens et que tel quel c'est pas terrible côté portabilité.

J'ai donc voulu utiliser httplib :

import httplib
conn = httplib.HTTPConnection("exolandia.be")
conn.request("GET", "/doc/wikini/wakka.php?wiki=ListeDeTousLesItems")
r1 = conn.getresponse()
print r1.status, r1.reason
doc = r1.read()
conn.close()
print doc

et je récupère :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A
^^^^^^^^^^^^^^^^^^^^^^


La page en question n'est plus là, il y a une redirection automatique
301.
Tu peux le récupérer en lisant les headers de la page en question.
r1.getheader("location")


--
William - http://flibuste.net

Avatar
Yermat
Jonathan Barnoud writes:


J'ai besoin pour un script de récupérer une page web.
J'ai pensé dans un premier temps utiliser les outils du systeme et
télécharger la page en question avec wget (je suis sous linux) :
[...]
La page en question n'est plus là, il y a une redirection automatique

301.
Tu peux le récupérer en lisant les headers de la page en question.
r1.getheader("location")




Et puis tu peux aussi regarder le module urllib2 :
http://docs.python.org/lib/module-urllib2.html

Ça devrait te simplifier des trucs...

--
Yermat


Avatar
F. Petitjean
On Thu, 30 Dec 2004 17:07:32 +0100, Jonathan Barnoud wrote:
J'ai besoin pour un script de récupérer une page web.
J'ai pensé dans un premier temps utiliser les outils du systeme et
télécharger la page en question avec wget (je suis sous linux) :

import os
url="http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems"
os.system("wget "+url)
os.system("mv wakka.php?wiki=ListeDeTousLesItems wakka.php")
doc = open("wakka.php","r")
doc = doc.read()
print doc

Ça marche nickel sauf que le scipt est amené à petre utiliser pas des
windowsiens et que tel quel c'est pas terrible côté portabilité.

J'ai donc voulu utiliser httplib :

import httplib
conn = httplib.HTTPConnection("exolandia.be")
conn.request("GET", "/doc/wikini/wakka.php?wiki=ListeDeTousLesItems")
r1 = conn.getresponse()
print r1.status, r1.reason
doc = r1.read()
conn.close()
print doc

et je récupère :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
[snip]

</BODY></HTML>

au lieu de la page demandée.
Non! vous obtenez

r1.status
301
r1.reason
'Moved Permanently'
Cela me paraît clair.
Comment contourner ça ? Httplib ne peut pas récupérer de page php ??

Merci de toute aide,
Vous êtes supposé vérifier le « status » retourné et prendre les mesures

nécessaires qui en découlent :-) (oui httplib est d'assez bas niveau)
En regardant la source de httplib.py je vois
r1.msg.headers
qui donne plein d'infos puis
r1.getheader('Location')
'http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems'
zut c'est l'adresse d'origine
à mon avis faut faire une requête GET sur une nouvelle adresse qui est
indiquée quelque part dans la réponse.
Mais le temps d'essayer tout cela en mode interactif (en jonglant entre
la source, la session python et l'écriyure de ce message) la connexion
n'est semble-t-il plus établie, ais vous voyez dans quel sens aller.

Jonathan Barnoud
je vois « urllib2.HTTPRedirectHandler.http_error_301 » à l'adresse

suivante http://diveintopython.org/http_web_services/redirects.html
il me semblerait donc judocoeux de combiner urllib2 et httplib.

Cordialement.

Avatar
Jonathan Barnoud
Yermat wrote:

Jonathan Barnoud writes:


J'ai besoin pour un script de récupérer une page web.
J'ai pensé dans un premier temps utiliser les outils du systeme et
télécharger la page en question avec wget (je suis sous linux) :
[...]


La page en question n'est plus là, il y a une redirection automatique
301.
Tu peux le récupérer en lisant les headers de la page en question.
r1.getheader("location")




Et puis tu peux aussi regarder le module urllib2 :
http://docs.python.org/lib/module-urllib2.html

Ça devrait te simplifier des trucs...

Merci,

J'y arrive donc en faisant :

import urllib2
conn=urllib2.urlopen("http://www.exolandia.com/doc/wikini/wakka.php?wiki=ListeDeTousLesItems")
document = conn.read()
print document

Jonathan Barnoud