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