Codeigniter XML-RPC szerver/kliens SSL/HTTPS kiegészítése

Hirdetés

Codeigniter

A Codeigniter nevű PHP framework-öt már elég régóta, több, mint 10 éve használom, ám annyira gyorsan fejlődik, és sokszor teljesen feleslegesen távolítanak el belőle remek funkciókat, hogy gyakorlatilag tényleg lemaradtam vele, és csupán azt hegesztem hozzá, ami tényleg fontos.

Az XML-RPC szerver/kliens nálam már régóta kiépült, gépek automatikus kommunikációjához használom. Az XML-RPC ráadásul már ki is került a hivatalos Codeigniter verziókból, állítólag a PHP 7.0 miatti nehézkes megoldás miatt (persze ez csak bullshit, ha valamit nagyon akarunk, megoldjuk PHP 7.0 alatt is, nekem sikerült).

Az XML-RPC egyetlen nagy hátránya, hogy nem támogatja a most már de-facto kötelező HTTPS-t. Nagy kár. A neten fellelhetők félmegoldások, nekem egyik se működött, pedig pl a cURL kiegészítés egész jól hangzott.

Marad hát a saját megoldás, ami, néha a dolgok mögé nézve nagyon egyszerűnek tűnik. Akit nem érdekel az ezzel kapcsolatos technikai részlet, irány a poszt végén lévő GitHub link, ahonnan letölthető.

Nagyon egyszerű a trükk

Kellett törnöm a fejem, miért nem működik, aztán rájöttem, hogy az fsockopen körül lesz a megoldás, ugyanis ez már elég erősen legacy a PHP-ben. De hiába őskövület, rábírható az SSL-féle 443-as port használatára.

Volt egy ilyen sor az eredeti XML-RPC library-ben:

$fp = @fsockopen($this->server, $this->port,$this->errno, $this->errstr, $this->timeout);

Ennek az elejére biggyesztettem egy apró kiegészítést, ami 443-as port esetén"ssl://"-rel egészíti ki a szervert. Íme:

$fp = @fsockopen(($this->port == 443 ? "ssl://" : "").$this->server, $this->port,$this->errno, $this->errstr, $this->timeout);

És tényeg ennyi. Innentől kezdve, csupán egy sor módosításával HTTPS-en keresztül is ugyanúgy megy a kommunikáció, mint azelőtt.

Letöltés, telepítés

Ezt fel is dobtam GitHubra, ott megtalálható, hogy pontosan mit, hová kell letölteni, bemásolni - egyetlen .php fájlról van szó.

GitHub link

Bízom benne, másnak is hasznos lesz, ahogy nekem is az.