PHP: POST directo a través de socket

Para hacer una petición POST a través de php -sin utilizar curl()- podemos hacerlo simplemente con sockets -con HTTPS si lo queremos seguro- y algo de suerte -para que todo funcione a la primera-:
// Variables
$host = "www.host.com";
$referer = "http://www.host-referer.com";
$path = "/ruta/al/form.php";
$data = "Lo que vamos a mandar por POST";

// Abriendo un socket seguro (443)
$fp = fsockopen('ssl://'.$host, 443, $errno,$errstr,30);

// Enviando cabeceras y datos
fputs($fp, "POST $path HTTP/1.0\\r\\n");
fputs($fp, "Host: $host\\r\\n");
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);

// Recogiendo el resultado
$result = ''; 
while(!feof($fp))
    $result .= fgets($fp, 128);

// Cerramos y visualizamos respuesta
fclose($fp);
print_r($result);
Como veis no hace falta que la petición vaya envuelta en una variable si el servidor no lo espera de esa forma.

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.