Http et la méthode post

Soyez le premier à donner votre avis sur cette source.

Vue 32 055 fois - Téléchargée 491 fois

Description

Il peut être intéressant de poster des données sans passer par un formulaire. En particulier, pour poster des données à un autre script, si celui-ci n'est pas sur votre site.

Il est possible d'envoyer la même chose que votre navigateur avec une socket. (il faut le module socket de php installé)

Exemple : envoyer des données à form2mail.pl sur FREE

Source / Exemple :


<?php
/*

  • $Id: httppost.func.php,v 1.1 2003/12/28 12:48 adadou Exp $
  • /
/*
  • Permet d'envoyer des données par la méthode http POST
  • @param string $Host : Hote du script destinataire
  • @param string $URI : URI du script qui recevra les données
  • @param string $Referer : page d'où sont émises les données
  • @param array $Post : tableau de varaibles à envoyer
  • @return array
  • /
function httpPost($Host, $URI, $Referer, $Post) { $Body = ''; foreach($Post as $key => $value) { $Body.= urlencode($key).'='.urlencode(stripslashes($value)).'&'; } $ContentLength = strlen($Body); // Generate the Request header $Request = "POST $URI HTTP/1.1\r\n"; $Request.= "Host: $Host\r\n"; $Request.= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) '; $Request.= "Gecko/20021204\r\n"; $Request.= 'Accept: text/xml,application/xml,application/xhtml+xml,'; $Request.= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,'; $Request.= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $Request.= "Accept-Language: en-us, en;q=0.50\r\n"; $Request.= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $Request.= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n"; $Request.= "Keep-Alive: 300\r\n"; $Request.= "Connection: keep-alive\r\n"; $Request.= "Referer: $Referer\r\n"; $Request.= "Cache-Control: max-age=0\r\n"; $Request.= "Content-Type: application/x-www-form-urlencoded\r\n"; $Request.= "Content-Length: $ContentLength\r\n\r\n"; $Request.= "$Body\r\n"; // Open the connection to the host $socket = fsockopen($Host, 80, &$errno, &$errstr); if (!$socket) { $Result['errno'] = $errno; $Result['errstr'] = $errstr; return $Result; } else { $idx = 0; fputs($socket, $Request); while (!feof($socket)) $Result[$idx++] = fgets($socket, 128); fclose ($socket); return $Result; } } ?> /* form2mail.php */ <?php /*
  • Envoi d'un mail avec Form2Mail sur Free
  • /
include('httppost.func.php'); $URI = "/cgi-bin/form2mail.pl"; $Host = "perso0.free.fr"; /* envoi un mail à LOGIN@free.fr */ //$Referer = 'http://adpro22.free.fr/dummy/form2mail.php'; $Referer = 'http://LOGIN.free.fr/dummy/form2mail.php'; $post['email'] = 'email@test.com'; $post['message'] = 'Hello World :)'; $post['ip'] = $REMOTE_ADDR; echo '<pre>'; print_r(httpPost($Host, $URI, $Referer, $post)); echo '</pre>'; ?>

Conclusion :


J'utilise ce script sur mon site. Les visiteurs postent à partir d'un formulaire. Un script PHP récupère les données et en ajoute d'autres.

On peut aussi bien passer directement $_POST au script en faisant httpPost($Host, $URI, $Referer, $_POST) mais ça manque d'intérêt...

---
update:
Il faut mettre votre login free à la place de LOGIN dans $Referer, car si vous laissez adpro22, c'est moi qui recoit votre mail :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

DaCodeManiak
Messages postés
3
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
17 janvier 2011
-
Pour pouvoir utiliser ce très bon script en utilisant le protocole sécurisé https, il faut effectivement changer le host et aussi le port à utiliser :

Host => ssl://host
Port => 443 (ou un autre si le serveur accepte sur un autre port)
dvdstory
Messages postés
192
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
10 août 2009
-
Le script marche nikel chrome en utilisant http mais j'essaye de l'utiliser pour envoyer les données a un serveur https, je suppose qu'il fait modifier le numéro de port du socket et/ou les entêtes (header) mais je ne connais pas le numéro de port de https ni les header.
Si quelqu'un à la solution, elle est le bien venue.
Merci d'avance
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
Suffit de lire pourtant :o

"Call-time pass-by-reference has been deprecated" <== Les appels par référence sont dépréciés
"argument passed by value;" <== argument passé par copie.

"If you would like to pass it by reference, modify the declaration of fsockopen()." Pour passer les variables par références, il suffit de modifier les arguments dans fsockopen();

"if you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file."Ou alors, modifier le PHP.ini => allow_call_time_pass_reference = "TRUE"

"However, future versions may not support this any longer." Sauf que plus tard, il se peut qu'il n'y ai aucun support la dessus.

"Undefined variable: debug in c:\program files\easyphp1-7\www\index.php on line 5" <== Variable $debug inexistante.

Voila.
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
on va pas s'en sortir avec aussi peu de code: je dois avoir qq ch de significatif, c'est pour ça que je t'ai dit (2 fois): le code autour de la ligne indiquée.
jmvd2
Messages postés
17
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
16 mars 2010
-
Ha oki, alors voici
ligne 5:
strong.bad { color: red; font-weight: bold; }
ligne 555:
"65000" => "Devil, Sockets des Troie, Stacheldraht",

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.