Http et la méthode post

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

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.