Ho bisogno di implementare un'applicazione molto semplice simile a un server web in Python che esegua richieste e risposte HTTP di base e mostri output di base sulla pagina web. Non sono troppo preoccupato di codificarlo in Python, ma non sono sicuro da dove cominciare? Come impostare questo? Un file? Più file? Immagino di non avere idea di come affrontare il fatto che si tratta di un "server" - quindi non ho familiarità con il modo di affrontare le richieste HTTP/socket/richieste di elaborazione, ecc. Qualche consiglio? Risorse?Come posso implementare un semplice web server usando Python senza usare alcuna libreria?
risposta
È possibile utilizzare socket programming per questo scopo. Il seguente frammento crea un socket TCP e in ascolto sulla porta 9000 per le richieste http:
from socket import *
def createServer():
serversocket = socket(AF_INET, SOCK_STREAM)
serversocket.bind(('localhost',9000))
serversocket.listen(5)
while(1):
(clientsocket, address) = serversocket.accept()
clientsocket.send("HTTP/1.1 200 OK\n"
+"Content-Type: text/html\n"
+"\n" # Important!
+"<html><body>Hello World</body></html>\n")
clientsocket.shutdown(SHUT_WR)
clientsocket.close()
serversocket.close()
createServer()
avviare il server, $ python server.py
. Aprire http://localhost:9000/
nel browser Web (che funge da client). Quindi, nella finestra del browser, è possibile vedere il testo "Hello World" (risposta http).
EDIT ** Il codice precedente è stato testato solo su Chrome, e come voi ragazzi suggerito su altri browser, il codice è stato modificato come:
- per rendere la risposta HTTP-alike è possibile inviare in pianura intestazione con http versione 1.1, codice di stato 200 OK e content-type text/html.
- Il socket del client deve essere chiuso una volta inviata la risposta poiché si tratta di un socket TCP.
- Per chiudere correttamente il socket client,
shutdown()
deve essere chiamato socket.shutdown vs socket.close
Quindi il codice è stato testato su cromo, firefox (http://localhost:9000/) e semplice arricciatura terminale (arricciare http://localhost:9000).
-1. Hai provato questo? Questo non funziona affatto; è un server socket, ma non parla HTTP. – Ashe
In realtà non parla HTTP, quindi quasi tutti i browser non funzionano con questo. Non funziona in Chrome. Funziona solo su Firefox se si preme il pulsante Stop. Questo non è un server web. – Ashe
Ho copiato il tuo script e l'errore è stato visualizzato dicendo che non è richiesto un oggetto simile a un byte e non un 'str'' come posso risolvere questo problema? – Simon
Si dovrebbe guardare il modulo SimpleHttpServer (py3: http.server).
A seconda di cosa si sta tentando di fare, è possibile utilizzarlo o controllare la fonte del modulo (py2, py3) per le idee.
Se si desidera ottenere un livello più basso, SimpleHttpServer estende BaseHttpServer (source) per farlo funzionare.
Se si desidera ottenere ancora di più di basso livello, dare un'occhiata a SocketServer (fonte: py2, py3).
Le persone eseguono spesso Python come python -m SimpleHttpServer
(o python3 -m http.server
) se vogliono solo condividere una directory: è un server completamente funzionale e ... semplice.
Probabilmente direi che dovresti prima controllare la documentazione HTTP. come RFC. – zinking
- 1. Libreria server Web F #
- 2. Libreria server AtomPub semplice
- 3. Come posso creare un'interfaccia web per un semplice script python?
- 4. Posso usare una libreria di nodi in un server Dart
- 5. Come posso implementare OCR su un sito Web utilizzando PHP?
- 6. Come posso creare un menu in HTML senza usare Javascript?
- 7. Libreria AJAX lato server Python?
- 8. python tkinter con un semplice web wrapper
- 9. Come posso testare un sito Web senza alcuna classe di backend?
- 10. Come posso implementare Offset Path Effect in SVG senza usare Javascript o dilatare/erodere i filtri?
- 11. come implementare FTP usando java?
- 12. Come supera un server web Python GIL
- 13. Posso usare le astrazioni di libreria in python?
- 14. Ganci Web in Python: qualsiasi libreria particolare?
- 15. Implementare oggetto differito senza usare jquery
- 16. Web server REST semplice nel contenitore mobile
- 17. Come implementare l'autenticazione sicura usando xml-rpc in python?
- 18. Come implementare funzionalità Logout usando Primavera Web MVC
- 19. Come implementare un filesystem molto semplice?
- 20. Come posso scrivere un semplice Servlet per Jetty usando Eclipse?
- 21. Posso usare webpack sul lato client senza server nodejs?
- 22. come usare git tortoise senza un server (utente locale singolo)
- 23. Come posso usare if dopo un CTE (SQL Server 2005)
- 24. Utilizzo dell'invio delle dipendenze senza alcuna libreria DI
- 25. Come posso implementare un generatore in C++?
- 26. Come implementare un semplice pulsante in PyQt
- 27. Il multiprocessing in Python è un modo semplice per implementare un semplice contatore?
- 28. Come posso impostare un campo calcolato semplice in SQL Server?
- 29. Come implementare un filesystem virtuale Python usando shelve
- 30. Come posso usare OAuth e PHP senza usare la libreria oauth-php?
Spiega ulteriormente i tuoi requisiti (e perché). Stai cercando di implementare lo stack completo a livello di applicazione o puoi utilizzare ad es. Apache? Spiega di più di cosa hai bisogno * E perché. * Infine, quando hai il tag "websocket", intendi o è solo un tag errato da usare? –
Senza usare * qualsiasi * librerie? Sicuramente 'socket' sta per essere richiesto al minimo? – geoffspear
pagina [questa documentazione] (http://docs.python.org/library/simplehttpserver.html), qui presumo che "tutte le librerie" siano librerie che non sono incluse nell'installazione di python. –