Il blog di
Maurizio Pelizzone

PHP e Python: connessione tramite socket

Mettiamo caso che ci sia un gestionale con un server scritto in python in ascolto su una porta predefinita ( es. 12345 ).

Mettiamo caso che i client all’interno della rete si connettano senza problemi ma un firewall sia configurato per filtrare tutti tentativi di connessione al di fuori della porta 80 ( vedi webserver )

Mettiamo caso da un pagina web scritta in php si voglia interagire con il gestionale interrogandolo sullo stato di ordini, bolle, fatture, automatizzare la preparazione di alcune stampe e si voglia anche avere la possibilità di inviare un ordine.
Tutto questo cercando di mantenere un adeguato livello di sicurezza.

Mettiamo caso che l’accesso diretto alla base dati ( PostgreSQL ) anche se possibile sia sconsigliata in quanto il gestionale ha degli automatismi che sarebbe inutile riportare in php.

Soluzione adottata: usare direttamente i socket sul webserver tramite php, e servirsi di un protocollo di comunicazione basato su http e xml ( aka REST )

Definizione del protocollo a parte ( di cui vi parlarò un altra volta ) il problema “PHP Socket Client” è risolto in poco più di 10 righe di codice:

[snippet=1677]

Le operazioni da fare sono abbastanza ovvie; dopo la definizione dei parametri tentiamo di aprire la connessione ( riga 5 ), e se tutto va bene mandiamo un pacchetto di dati ( riga 9 ) per poi rimanere in attesa della risposta del server ( il timeout è stato precedentemente impostato ).

Per finire chiudo la connessione e stampo quanto ricevuto dal server.

Se volete fare qualche esperimento vi lascio anche il sorgente per un “Socket Server” minimale scritto in python.

[snippet=1675]

Per l’implementazione del protocollo REST vi rimando alla prossima puntata … 🙂

.:: Maurizio Pelizzone
.:: Maurizio Pelizzone

Sono Maurizio Pelizzone, mi occupo di #wordpress per lavoro realizzando siti, temi e plugin personalizzati.
Quando serve faccio anche consulenza e formazione a distanza su WordPress, Woocommerce e Gutenberg

3 commenti

  1. Non è che potresti commentare le righe 7,8,9 del python?

    Per il php, io un accrocchio del genere l’ho dovuto usare per attivare account per un server di ultima online, soltanto che ci si collegava ad un telnet, non ti dico il casino per cacciare l’output giusto.

  2. Ciao, ho letto l’articolo molto interessante pubblicato sul tuo blog relativamente alla comunicazione via socket tra php e python. In questo articolo si parlava delle interazione client-server basata su un protocollo rest, http-xml, di cui si sarebbe parlato successivamente in un altro articolo, questo articolo relativo al protocollo pare non sia stato pubblicato più, o per lo meno non l’ho riconosciuto tra i titoli degli articoli successivi. Spero potrai rispondermi presto.

  3. @DierRe,
    anche se penso che ormai non ti serva più le righe che vanno dalla 7 alla 9 si occupano di dichiarare, creare ed aprire un “socket”.
    in pratica diciamo a pyhon di mettersi in ascolto sulla porta indicata e di “gestire” i dati che gli vengono inviati

    @Ignazio,
    pultroppo, nonostante sia passatto parecchio tempo, questa seconda parte non ho mai avuto occasione di scriverla.

    Mi chiedevi solo per curiosità o hai qualche problema in particolare?

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *