Paprasčiausias HTTP/HTTPS serveris

Posted: 2016-11-01 in Darbeliai
Žymos:, ,

Darbe gan dažnai reikia išbandyti visokius firmwarų parsisiuntimus, failų sinchronizavimus per HTTPS protokolą ir panašiai. Kadaise naudojau visą debesies infrastruktūros developinę virtualkę, bet mane su ja greitai užkniso greiti atnaujinimai ir visokie susigadinimai bei kompiuterio kankinimas tiesiog be didelio reikalo. Tad dabar, kol neprireikia kažkokių naujai gaminamų fyčių, stengiuosi apsieiti su paprasta testine ar netgi produkcine aplinka, tik ten pasidėti bile ką yra kiek sudėtingiau.

Užtai savo kompiuteryje pasikurti kokį nors paprastą HTTP serverį, iš kurio galėčiau siųstis failus (na, ne pats, o koks nors kodijamas įrenginys), man tapo būtinybe. Dėl tokio niekingai paprasto dalyko užsikurti Apache ar netgi ką nors lengvesnio, nematau daug prasmės. Ką ten rimtesnio bepasikursi, tai bus servisas, kuriuo reikės kažkiek rūpintis, konfigūruoti ir pan. Paskui nenaudosiu pusmetį ir pamiršiu, kaip ten viską susiruošiau.

Nuo šitokių dalykų gali išgelbėti minimaliai paprastutė Python klasikė. Gėris ir grožis, žinokit. Sakykim, aš kokiam nors kataloge paleidžiu paprastą komandą ir to katalogo turinys tampa pasiekiamas per HTTP. Jei padėsiu ten index.html failiuką, tai jį dar brauzeris ir gaus.

Kadangi aš jau kuris laikas savo paties darbeliams naudoju trečią pitoną, tai komanda paleisti paprasčiausią HTTP serverį atrodo va šitaip:

sudo python3 -m http.server 80

Paleidžiu ją, sakykim, paveiksliukų kataloge ir brauzeryje tuos paveiksliukus pamaigau:

Python 3 http server | Darau, blė

Komanda sudo panaudota tam, kad galėčiau paleisti 80-ą portą. Be jos galėčiau paleisti pvz. su 8080, bet man dažniausiai reikia standartinio HTTP porto.

Tiesa, antrojo pitono naudotojai gali visai sėkmingai padaryti tą patį su tokia komanda:

sudo python -m SimpleHTTPServer 80

Rezultatas bus tas pats.

Va jeigu reikia HTTPS serverio (o man reikia dar dažniau, nei „paprasto“ HTTP), tai tada jau teks truputuką paskriptinti ir dar susigeneruoti savirašį serverio sertifikatą.

Skriptukas https.py, kurio turinys yra toks:

# openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
import ssl
import sys
import os

from http import server

httpd_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
if len(sys.argv) > 1 and sys.argv[1].isdigit():
    p = int(sys.argv[1])
else:
    p = 4443

httpd = server.HTTPServer(('0.0.0.0', p), server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile=("%s%sserver.pem" % (httpd_dir, os.sep)), server_side=True)
httpd.serve_forever()

Va ir viskas. Nusprendžiama, kad sertifikato failas server.pem visada bus tam pačiam kataloge, kaip ir https.py, tai tada šį skriptuką bus galima pasileisti bet kuriam patogiam kataloge, kuriam yra reikalingi parsisiuntimui failai:

sudo python3 /<kelias iki skripto>/https.py 443

443 yra standartinis HTTPS portas, jei ką.

Skripto komentare, jei atkreipėte dėmesį, yra openssl komandžikė serverio sertifikatui sugeneruoti. Kad nepamirščiau.

Naudokitės į sveikatą, jei prireiks. Viskas veikia ir ant Windows, ir macOS.

Reklama
Komentarai
  1. Vytenis parašė:

    Išmėgink Lets encrypt, tikrai patiks.

  2. kažkas parašė:

    Ir visas “C:\Users\jusuvardas“ tampa prieinamas per http 😀

  3. raimis parašė:

    ačiū, kažkaip niekada nesusimasčiau apie tokį patogumą.

  4. n\a parašė:

    Taipogi pries pora savaiciu prireike kokio nors portable/lengvo http serviso (tingejosi iis’a ijungineti ar apache pakurineti) ir susiradau MiniWeb (http://miniweb.sourceforge.net/). Puikus dalykelis – opensource, lengvas ir t.t. minusas galbut tik tas, kad nera https, bet man to ir nereikejo 🙂

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s