OVH Cloud OVH Cloud

Capture d'un site avec POST

3 réponses
Avatar
Denis Beauregard
Bonjour,


Avec des outils comme httrack, on peut faire la copie d'un site.
Mais, ces outils ont des limites. Aussi, je me suis dit que je
pourrais faire mon propre outil en utilisant PHP en soi.


Mon problème: si une page est lue grâce à des arguments GET, il suffit
d'utiliser l'URL pour passer ces arguments; mais, si c'est un
formulaire avec la méthode POST, il faut passer les arguments d'une
autre façon. J'aimerais savoir comment le faire. Est-ce avec
Header(), et si oui, quel serait l'argument ? Puis-je le faire
avec un fsockopen ?


Mon application: un groupe de travail dont je fais partie voudrait
relire et archiver certaines pages d'un groupe d'environ 200 ou 300
sites, ceci de façon automatisée. Certains sites sont modifiés à
chaque jour, certains 2 fois par jour, certains 3 ou 4 fois par mois
(et pas nécessairement aux 7 ou 10 jours).

On ne veut archiver qu'une page ou deux par site, en plus de photos
éventuelles, mais il y a beaucoup de sites, d'où le besoin
d'automatiser.

Quelqu'un a une solution ? Je dois ré-expliquer avec plus de détails?


Denis

3 réponses

Avatar
loufoque
Message d'origine de Denis Beauregard :
Avec des outils comme httrack, on peut faire la copie d'un site.
Mais, ces outils ont des limites. Aussi, je me suis dit que je
pourrais faire mon propre outil en utilisant PHP en soi.


Mon problème: si une page est lue grâce à des arguments GET, il suffit
d'utiliser l'URL pour passer ces arguments; mais, si c'est un
formulaire avec la méthode POST, il faut passer les arguments d'une
autre façon. J'aimerais savoir comment le faire. Est-ce avec
Header(), et si oui, quel serait l'argument ? Puis-je le faire
avec un fsockopen ?


Mon application: un groupe de travail dont je fais partie voudrait
relire et archiver certaines pages d'un groupe d'environ 200 ou 300
sites, ceci de façon automatisée. Certains sites sont modifiés à
chaque jour, certains 2 fois par jour, certains 3 ou 4 fois par mois
(et pas nécessairement aux 7 ou 10 jours).

On ne veut archiver qu'une page ou deux par site, en plus de photos
éventuelles, mais il y a beaucoup de sites, d'où le besoin
d'automatiser.

Quelqu'un a une solution ? Je dois ré-expliquer avec plus de détails?


Il faut utiliser les sockets (en php le plus simple c'est fsockopen()),
se connecter au serveur HTTP et dialoguer selon le protocole HTTP 1.x
(1.0 ou 1.1)
On peut facilement trouver les spécifications sur le net avec google.

Avatar
Bipede
"Denis Beauregard" a écrit dans le message de news:

Bonjour,


Avec des outils comme httrack, on peut faire la copie d'un site.
Mais, ces outils ont des limites. Aussi, je me suis dit que je
pourrais faire mon propre outil en utilisant PHP en soi.


Mon problème: si une page est lue grâce à des arguments GET, il suffit
d'utiliser l'URL pour passer ces arguments; mais, si c'est un
formulaire avec la méthode POST, il faut passer les arguments d'une
autre façon. J'aimerais savoir comment le faire. Est-ce avec
Header(), et si oui, quel serait l'argument ? Puis-je le faire
avec un fsockopen ?


Cela ne se fait pas avec le header de la requète mais dans le corps du
message...

Mon application: un groupe de travail dont je fais partie voudrait
relire et archiver certaines pages d'un groupe d'environ 200 ou 300
sites, ceci de façon automatisée. Certains sites sont modifiés à
chaque jour, certains 2 fois par jour, certains 3 ou 4 fois par mois
(et pas nécessairement aux 7 ou 10 jours).

On ne veut archiver qu'une page ou deux par site, en plus de photos
éventuelles, mais il y a beaucoup de sites, d'où le besoin
d'automatiser.


Là ça ce complique étant donné que toute image apparaît sous forme de
référence dans une page html le programme doit être capable de parser le
code HTML pour charger également toute les références (images, styles,
scripts...). Cela dit ce n'est pas impossible avec quelques regexp.

Quelqu'un a une solution ? Je dois ré-expliquer avec plus de détails?


J'imagine de la librairie Curl devrait être la façon la plus simple de faire
une requète POST (si tu parviens à comprendre comment faire...). Sinon il
reste la possibilité de tout faire "à la main" en utilisant une socket et
dans ce cas il faut comprendre le format utilisé multipart/form-data.
Celui-ci est assez bien décrit à l'adresse :
http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4

Avatar
loufoque
Message d'origine de Bipede :
Là ça ce complique étant donné que toute image apparaît sous forme de
référence dans une page html
Faux.

Les données d'une image peuvent très bien se trouver dans le document
(x)html.