mikrotik_snippets/linux/lighttpd-python-cgi.txt
2018-02-13 19:27:06 -03:00

103 lines
2.9 KiB
Plaintext

Lighttpd: CGI with Python
------------------------------
* Enable CGI in lighttpd:
* Create: /etc/lighttpd/conf-available/95-testing-cgi.conf
#-- Alias.
alias.url += ( "/testing" => "/home/user/path/to/testcgi/dir" )
#-- Server.
$HTTP["url"] =~ "^/testing" {
cgi.assign = ("" => "")
}
* Enable the configuration.
ln -s /etc/lighttpd/conf-available/95-testing-cgi.conf /etc/lighttpd/conf-enabled/95-testing-cgi.conf
* Restart lighttpd:
systemctl restart lighttpd.service
* Simple python http cgi server:
tree
+-- cgi-bin
| +-- retrieval.py
+-- forms.html
chmod +x cgi-bin/retrieval.py
python -m CGIHTTPServer 8088
http://localhost:8000/forms.html
* Simple python https cgi server:
tree
+-- retrieval.py
+-- forms.html
* Generate the https certificate:
openssl req -x509 -newkey rsa:4096 -keyout servercgi.pem -out servercgi.pem -days 3650 -nodes
* servercgi.py:
#!/usr/bin/env python3
import cgitb, getpass, http.server, os, ssl, sys
PUERTO = 9099
def Main():
nombre = getpass.getuser()
if (nombre != 'myusername'):
print('ERROR: use only with the user myusername.')
return
os.environ['PYTHONDONTWRITEBYTECODE'] = 'TRUE'
os.chdir('/path/to/tree')
cgitb.enable()
server = http.server.HTTPServer
handler = http.server.CGIHTTPRequestHandler
srvaddr = ('', PUERTO)
handler.cgi_directories = ['/']
srvobj = server(srvaddr, handler)
srvobj.socket = ssl.wrap_socket(srvobj.socket, certfile='servercgi.pem', server_side=True)
handler.have_fork=False
print('Page: https://127.0.0.1:' + str(PUERTO) + '/retrieval.py')
srvobj.serve_forever()
return
Main()
* Start the server with ./servercgi.py
* Testing script: /path/to/tree/retrieval.py
#! /usr/bin/env python3
import cgi, cgitb
cgitb.enable(format='html')
#cgitb.enable(format='text')
def ShowHtml():
print('Content-Type: text/html; charset=UTF-8')
print('')
print('<html><head>')
print('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />')
print('<meta http-equiv="Expires" content="0">')
print('<meta http-equiv="Last-Modified" content="0">')
print('<meta http-equiv="Pragma" content="no-cache">')
print('<meta http-equiv="Cache-Control" content="no-cache, mustrevalidate">')
print('<title>MyTitle</title>')
print('</head><body>')
print('This is a test CGI page.')
print('</body></html>')
print('')
return
ShowHtml()
* End.