[PHP/Socket] How to send data via POST with the Socket

Holaz a todos,

come per l’articolo precedente dell’invio di dati via POST con le cURL, ora vi spiego come inviarli via socket in PHP.
Questo script potrebbe essere utile qualora vi venisse in mente di effettuare uno scambio dati su svariati web server.

Ecco il codice (sempre rigorosamente commentato):

<?php
//Nome della pagina alla quale inviare i dati
$uri = '/test/response_socket.php';
 
//Indirizzo web (http:// o IP) dove indirizzare la chiamata socket (in questo caso è su un web server in locale)
$sito = '192.168.1.1';
 
$query = 'username=luongovincenzo92&password=7c4a8d09ca3762af61e59520943dc26494f8941b'; //valori post
 
//Controllo se la chiamate via socket va a buon fine sulla porta 80
if (!($sock = fsockopen($sito, 8080))) // se va bene creo l'oggetto $sock
	die ("[ERRPR] Connessione non riuscita, si prega di controllare se le socket sono abilitate");
 
//Genero il il pacchetto POST (HEADER HTTP) per inviarlo
fputs ($sock,
  "POST $uri HTTP/1.1\r\n".
  "Host: $sito\r\n".
  "Content-Type: application/x-www-form-urlencoded\r\n".
  "Content-Length: ".strlen($query)."\r\n". //Grandezza della chiamata
  "Connection: close\r\n\r\n".
  $query."\r\n");//dati di invio
 
//Vabiabile di contenimento dell'output di risposta
$out = "";
 
//Ciclo e attendo la risposta del socket per estrapolare la risposta del file
// fino a termine della chiamata
while (!feof($sock))
  $out .= fgets($sock);
 
//Chiudo la connessione
fclose($sock); 
 
//Cerco di pulire l'output sporcato dalla richiesta ( prima dei doppi \r\n cè la richiesta HTTP completa che a noi non serve)
$output_pulito = explode("\r\n\r\n", $out);
 
//Stampo la risposta
print $output_pulito[1];
?>

Per la pagina di risposta c’è sempre la solita:

<?php
 
print_r($_POST);
 
?>

Note: Ricordate che per eseguire correttamente questo script dovreste avere abilitate le socket sul vostro web server altrimenti non funzionerà mai.

Note 2: Se invece dovete aprire una connessione ad un web server esterno, dovrete abilitate il parametro allow_url_fopen del vostro php.ini

Ogni problema o dubbio commentate :D

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>