Envoyer un formulaire POST avec le header

Répondre
maxroucool
le 10/03/2009 à 22:03
maxroucool
Slt tlm,

je voudrais savoir comment faire pour envoyer un formulaire avec la méthode POST simplement par le header. J'ai vu dans les commentaires de la doc officielle sur la fonction header() ce bout de code:

Found this script after much despair, should be useful to lot of people.
To submit a form using POST method through PHP, just add the data to be posted as header. This essentially saves one extra html page sent to the browser when user has to be redirected. Mostly found this technique useful for redirecting to payment gateways.

<?php
$host = "www.example.com";
$path = "/path/to/script.php";
$data = "data1=value1&data2=value2";
$data = urlencode($data);

header("POST $path HTTP/1.1\r\n" );
header("Host: $host\r\n" );
header("Content-type: application/x-www-form-urlencoded\r\n" );
header("Content-length: " . strlen($data) . "\r\n" );
header("Connection: close\r\n\r\n" );
header($data);
?>


Seulement lorsque j'essaye en local avec Wamp, ca ne marche pas, et FireFox essaye de télécharger le script PHP (il lance la boite de dialogue de téléchargement).

Je pensais donc qu'il fallait mettre un statut:200, mais ca n'a rien changé!

header('HTTP/1.1 200 OK', true, 200);


Est-ce que vous savez comment on fait-ca?


Merci bp!
+++
LA GLOBULE
le 10/03/2009 à 22:11
LA GLOBULE
Tu souhaites récupérer le résultat du traitement du formulaire ?
Pour cela, tu peux utiliser la librairie curl.
maxroucool
le 11/03/2009 à 09:46
maxroucool
Slt La Globule,

Il me semblait bien que c'était possible ave cURL, mais cette librairie n'est pas dispo sur beaucoup de serveur non?

Sinon, je voudrais juste savoir si le formulaire revoie un statut 200 ou 404, ou 500.

+++
LA GLOBULE
le 11/03/2009 à 11:20
LA GLOBULE
Curl peut te fournir cette information.

Et en général, cette librairie est disponible.
Darkylmnx
le 21/01/2012 à 22:30
Darkylmnx
En effet la livrairie curl n'est pas sur beaucoup de serveur par contre deux alternatives sont les suivante :
<?php
function _do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array(
'method' => 'POST',
'content' => $data
));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
fclose($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}


celui si fait un simple fopen distant sur url avec en prime des param de requêtte http

la 2ème solution est d'utiliser les fonction http_* native de php qui sont vraiment pas mal

http://www.php.net/manual/en/ref.http.php

en combinant deux fonction j'ai réussi à faire une requête post vers une autre page depuis php même

<?php
$post_request = http_post_data("https://un-url.fr", $post_data);
$result = http_parse_message($post_request);


où $result est un objet qui contient les éléments de réponse .

pour récupérer le contenu de la réponse donc le html d'un site c'est

$result->body;
LupusMic
le 30/01/2012 à 02:04
LupusMic
(Darkylmnx) Le bbcode, c'est bien aussi.

En ce qui concerne le code de maxroucool, il manquait simplement des espaces dans les en-têtes générés.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours