Comment avez-vous POST à une page en utilisant le PHP header() de la fonction?
J'ai trouvé le code suivant sur ici qui, je pense, fait ce que je veux, mais ça ne fonctionne pas:
$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);
Je suis à la recherche pour valider les données de formulaire sans envoyer les utilisateurs vers un milieu de page, puis l'utilisation de JavaScript pour rediriger. Aussi, je ne veux pas utiliser GET de sorte qu'il n'est pas aussi facile à utiliser le bouton de retour.
Est-il quelque chose de mal avec ce code? Ou est-il une meilleure méthode?
Modifier je pensais à ce que l'en-tête de la fonction ferait. Je pensais que je pouvais obtenir le navigateur de publier sur le serveur avec les données, mais ce n'est pas ce qu'il doit faire. Au lieu de cela, j'ai trouvé un dans mon code pour éviter la nécessité d'un post à tous (pas de rupture et continuer sur le cas suivant, à l'intérieur de l'interrupteur).
Vous devez vous connecter pour publier un commentaire.
L'en-tête de fonction est utilisé pour envoyer des en-têtes de réponse HTTP à l'utilisateur (c'est à dire vous ne pouvez pas l'utiliser pour créer des en-têtes de requête.
Puis-je vous demander pourquoi vous faites ça? Pourquoi simuler une requête POST quand vous pouvez juste là et puis agir sur les données d'une certaine manière? Je suis en supposant bien sûr script.php réside sur votre serveur.
Pour créer une requête POST, ouvrir une connexion TCP vers l'hôte à l'aide de fsockopen(), puis utiliser fwrite() sur le gestionnaire retourné à partir de fsockopen() avec les mêmes valeurs que vous avez utilisé dans l'en-tête fonctions dans l'OP. Alternativement, vous pouvez utiliser cURL.
La réponse à cette question est très nécessaire aujourd'hui car tout le monde ne veut utiliser cURL pour consommer des services web. Aussi PHP ne permet pour cela, utilisez le code suivant
En plus de ce Salaryman dit, jetez un oeil à des classes dans POIRE, il y a de la requête HTTP classes que vous pouvez utiliser même si vous n'avez pas l'extension cURL installé dans votre distribution PHP.
Il y a une bonne classe qui fait ce que vous voulez. Il peut être téléchargé à: http://sourceforge.net/projects/snoopy/
Cela vous mettra tout de suite
$port
dans le paramètre de signature lorsqu'il n'est pas utilisé?