Envoyez des données en POST avec header()

Résolu/Fermé
issanasralli
Messages postés
18
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
9 mars 2014
- 24 sept. 2013 à 16:42
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
- 3 oct. 2013 à 01:48
Bonjour,


Je veux savoir est-il possible d'envoyer des données en POST en appelant la page web "www.serv1.com/search.php" en utilisant la fonction header vers une page située dans autre serveur www.serv2.com/handle.php ??

J'ai cherché sur le net et j'ai trouvé une solution dont on utilise les sessions et je pense que ça ne convient pas avec mon problème.

Merci bien de me répondre.

4 réponses

Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
543
25 sept. 2013 à 18:50
Salut,

La fonction header() ne permet de gerer que les entêtes HTTP de réponse du serveur, tu ne peux donc pas l'utiliser pour créer une entête HTTP de requête (GET ou POST). Le header('Location: ...') est une réponse du serveur demandant au client de refaire une requête sur une autre page.

Pour effectuer une requête HTTP depuis ton serveur en php, tu dois utiliser un socket ou cURL.

Bonne journée
3
issanasralli
Messages postés
18
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
9 mars 2014
2
26 sept. 2013 à 11:05
Merci bien Pitet, c'est tout à fait claire!
Mais est il possible d'utiliser les sockets ou bien les cURL pour atteindre mon objectif?
0
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
543
26 sept. 2013 à 14:11
Si ton objectif est d'envoyer une requête POST depuis un script php sur ton serveur, voici deux exemple avec cURL et socket :
http://dev.petitchevalroux.net/php/faire-une-requete-post-avec-curl-php.306.html
https://snipplr.com/view/70119

Bonne journée
0
issanasralli
Messages postés
18
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
9 mars 2014
2
29 sept. 2013 à 12:32
1000 merci pour votre aide Pitet !!! ça marche bien!!!
0
issanasralli
Messages postés
18
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
9 mars 2014
2
Modifié par issanasralli le 1/10/2013 à 23:04
J'ai testé avec socket et ça marche bien avec des liens http mais ça marche pas avec un lien https, voilà mon code:

<?php
// submit these variables to the server
$i=12654862;
$post_data = array("cin"=>"$i");

// send a request to specified server
$result = do_post_request("https://www2.inscription.tn/ORegMx/servlet/AuthentificationEtud?ident=cin", $post_data);
echo $result["content"];

if($result["status"] == "ok"){
// result of the request

if(stripos($result["content"],'?????')!=0)
{
echo 'postif<br>';
$tabContent = explode("\n", $content);
echo $tabContent[141];
}

}


function do_post_request($url, $data, $referer = ""){
// convert the data array into URL Parameters like a=1&b=2 etc.
$data = http_build_query($data);
// parse the given URL
$url = parse_url($url);



// extract host and path from url
$host = $url["host"];
$path = $url["path"];

// open a socket connection with port 80, set timeout 40 sec.
$fp = fsockopen($host, 80, $errno, $errstr, 40);
$result = "";

if($fp){
// send a request headers
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
if($referer != "") fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($data)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

// receive result from request
while(!feof($fp)) $result .= fgets($fp, 128);
}else{
return array("status"=>"err", "error"=>"$errstr ($errno)");
}

// close socket connection
fclose($fp);

// split result header from the content
$result = explode("\r\n\r\n", $result, 2);

$header = isset($result[0]) ? $result[0] : "";
$content = isset($result[1]) ? $result[1] : "";

// return as structured array:
return array(
"status" => "ok",
"header" => $header,
"content" => $content
);
}

?>
0
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
543
2 oct. 2013 à 09:20
D'après le manuel php, il faut utiliser le protocole ssl avec le port par défaut 443 pour les requêtes https.

Tu peux trouver plus d'info dans les commentaires de cette page en cherchant "https" :
https://www.php.net/fsockopen
0