Saya memiliki koneksi vpn dan ketika saya menjalankan python -m SimpleHTTPServer, ini berfungsi di 0.0.0.0:8000, yang berarti dapat diakses melalui localhost dan melalui ip asli saya. Saya tidak ingin robot memindai saya dan tertarik bahwa server hanya akan diakses melalui localhost.
Apa itu mungkin?
python -m SimpleHTTPServer 127.0.0.1:8000 # doesn't work.
Server http sederhana lainnya yang dapat dijalankan secara instan menggunakan baris perintah juga diterima.
python
http
command-line
python-2.x
simplehttpserver
pengguna1639431
sumber
sumber
http.server
memungkinkan pengikatan segera, misalnyapython3 -m http.server --bind 127.0.0.1 8000
akan cukupSimpleHTTPServer
adalah single-threading dan blocking, artinya Anda tidak akan dapat melakukan permintaan lain sampai permintaan sebelumnya selesai. Dan itu tidak memiliki dukungan jangkauan misalnya untuk streaming / mencari file media dari posisi tertentu. Alternatif yang lebih baik adalahtwisted
(pip install twisted
) yang dapat Anda jalankantwistd -n web --path /
. Itu juga dapat melakukan FTP anonim dengantwistd -n ftp -p 2121 -r /
. Lebih banyak server http satu baris: gist.github.com/willurd/5720255 .Jawaban:
Jika Anda membaca sumbernya, Anda akan melihat bahwa hanya port yang dapat diganti pada baris perintah. Jika Anda ingin mengubah host tempat ia dilayani, Anda perlu menerapkan
test()
metode theSimpleHTTPServer
andBaseHTTPServer
yourself. Tapi itu seharusnya sangat mudah.Inilah cara Anda melakukannya, dengan sangat mudah:
import sys from SimpleHTTPServer import SimpleHTTPRequestHandler import BaseHTTPServer def test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=BaseHTTPServer.HTTPServer): protocol = "HTTP/1.0" host = '' port = 8000 if len(sys.argv) > 1: arg = sys.argv[1] if ':' in arg: host, port = arg.split(':') port = int(port) else: try: port = int(sys.argv[1]) except: host = sys.argv[1] server_address = (host, port) HandlerClass.protocol_version = protocol httpd = ServerClass(server_address, HandlerClass) sa = httpd.socket.getsockname() print "Serving HTTP on", sa[0], "port", sa[1], "..." httpd.serve_forever() if __name__ == "__main__": test()
Dan untuk menggunakannya:
> python server.py 127.0.0.1 Serving HTTP on 127.0.0.1 port 8000 ... > python server.py 127.0.0.1:9000 Serving HTTP on 127.0.0.1 port 9000 ... > python server.py 8080 Serving HTTP on 0.0.0.0 port 8080 ...
sumber
Di Python versi 3.4 dan yang lebih tinggi,
http.server
modul menerimabind
parameter.Menurut dokumen :
sumber
Seperti yang dijelaskan @sberry , hanya melakukannya dengan menggunakan
python -m ...
metode yang bagus tidak akan mungkin, karena alamat IP di-hardcode dalam implementasiBaseHttpServer.test
fungsi.Cara melakukannya dari baris perintah tanpa menulis kode ke file terlebih dahulu adalah
python -c 'import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(("127.0.0.1", 8888), shs.SimpleHTTPRequestHandler).serve_forever()'
Jika itu masih dihitung sebagai satu liner tergantung pada lebar terminal Anda ;-) Ini tentu tidak mudah diingat.
sumber
H
. Terima kasih! - gist.github.com/cmawhorter/f2a09bcf63c68b0cff10python -c "import http.server as hs; hs.HTTPServer(('127.0.0.1', 8888), hs.SimpleHTTPRequestHandler).serve_forever()"
Perhatikan perubahan kutipan dan fakta bahwa Server HTTP Base dan Sederhana sekarang ada di http.server.