Muszę zaimplementować w Pythonie bardzo prostą aplikację podobną do serwera WWW, która będzie wykonywać podstawowe żądania HTTP i odpowiedzi oraz wyświetlać bardzo podstawowe dane wyjściowe na stronie internetowej. Nie jestem zbytnio zainteresowany faktycznym kodowaniem go w Pythonie, ale nie jestem pewien, od czego zacząć? Jak to ustawić? Jeden plik? Wiele plików? Chyba nie mam pojęcia, jak podejść do tego, że jest to "serwer" - więc nie mam pojęcia, jak podejść do obsługi żądań/gniazd HTTP/wniosków o przetwarzanie itd. Jakakolwiek rada? Zasoby?Jak mogę zaimplementować prosty serwer WWW przy użyciu Pythona bez korzystania z żadnych bibliotek?
Jak mogę zaimplementować prosty serwer WWW przy użyciu Pythona bez korzystania z żadnych bibliotek?
Odpowiedz
Do tego celu można użyć socket programming. Poniższy urywek tworzy gniazda TCP i nasłuchuje na porcie 9000 dla żądań 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()
Uruchom serwer, $ python server.py
. Otwórz http://localhost:9000/
w przeglądarce internetowej (która działa jako klient). Następnie w oknie przeglądarki możesz zobaczyć tekst "Hello World" (odpowiedź http).
EDIT ** Powyższy kod został przetestowany tylko na chromie, a jak wy zasugerował innych przeglądarek, kod został zmodyfikowany jako:
- Aby odpowiedź http-alike można wysłać w zwykły nagłówek z wersją http 1.1, kod stanu 200 OK i tekst typu content/html.
- Gniazdo klienta musi zostać zamknięte po przesłaniu odpowiedzi, ponieważ jest to gniazdo TCP.
- Aby prawidłowo zamknąć gniazdo klienta,
shutdown()
musi być nazywany socket.shutdown vs socket.close
Następnie kod został przetestowany na Chrome, Firefox (http://localhost:9000/) oraz prosty pozwijane w terminalu (zwijają http://localhost:9000).
-1. Czy próbowałeś tego? To w ogóle nie działa; jest to serwer gniazd, ale nie mówi HTTP. – Ashe
W rzeczywistości nie mówi on po HTTP, więc prawie każda przeglądarka nie będzie z tym działać. To nie działa w Chrome. Działa tylko w przeglądarce Firefox po naciśnięciu przycisku Stop. To nie jest serwer WWW. – Ashe
Skopiowałem twój skrypt, uruchomiłem go i dostaję komunikat, że 'wymagany jest obiekt bajtowy, a nie 'str'', jak to naprawić? – Simon
Powinieneś spojrzeć na moduł SimpleHttpServer (py3: http.server).
W zależności od tego, co próbujesz zrobić, możesz po prostu go użyć lub sprawdzić źródło modułu (py2, py3) w poszukiwaniu pomysłów.
Jeśli chcesz uzyskać więcej niskiego poziomu, SimpleHttpServer rozszerza BaseHttpServer (source), aby było po prostu działać.
Jeśli chcesz dostać nawet więcej niskim poziomie, spojrzeć na SocketServer (źródło: py2, py3).
Ludzie często uruchamiają pythona jak python -m SimpleHttpServer
(lub python3 -m http.server
), jeśli chcą tylko udostępnić katalog: to w pełni funkcjonalny i ... prosty serwer.
Najprawdopodobniej powinieneś najpierw sprawdzić dokumentację HTTP. jak RFC. – zinking
- 1. Prosty serwer WWW w PHP
- 2. Prosty serwer WWW REST w doku kontenera
- 3. Jak mogę utworzyć lokalny serwer WWW dla moich skryptów Pythona?
- 4. Napisz prosty serwer json REST przy użyciu aerozolu w Scala
- 5. Jak zaimplementować wirtualny system plików Pythona przy użyciu półki
- 6. Prosty serwer WWW w języku Python do zapisywania pliku
- 7. Skonfiguruj serwer WWW Apache do korzystania z serwera proxy
- 8. Jak mogę określić zależności bibliotek przy użyciu SystemJS?
- 9. Jak mogę wziąć pierwiastek kwadratowy z -1 przy użyciu Pythona?
- 10. ładującego serwer WWW w Scala
- 11. Ionic jako serwer WWW
- 12. C# Jak zrobić prosty serwer UDP
- 13. Jak rozpakować plik zip przy użyciu środowiska dotnet w wersji 4.0 bez korzystania z bibliotek innych firm
- 14. Powiąż serwer WWW z portem 80 bez korzenia
- 15. Czy mogę napisać serwer SOAP przy użyciu python suds?
- 16. Tworzenie SVG przy użyciu Pythona
- 17. Jak zaimplementować nową datę() przy użyciu sinon?
- 18. Jak mogę skompresować i zaszyfrować duży plik bez korzystania z zewnętrznych bibliotek DLL lub środowisk wykonawczych?
- 19. Prosty serwer http
- 20. Jak mogę dopasować podobne współrzędne przy użyciu Pythona?
- 21. przy użyciu Pythona 2.6?
- 22. Jak zaimplementować logowanie w serwisie WWW RESTful?
- 23. Wdrażanie usługi internetowej Java bez korzystania z serwera WWW
- 24. Jak mogę debugować żądania POST przy użyciu BaseHTTPServer/SimpleHTTPServer Pythona?
- 25. Importowanie bibliotek Pythona z Github
- 26. Jak zaimplementować bardzo prosty system plików?
- 27. Jak mogę narysować krzywą Beziera przy użyciu PIL Pythona?
- 28. Serwer WWW Dwscript
- 29. Jak przetestować serwer pocztowy przy użyciu Java?
- 30. Jak zaimplementować minimalny serwer dla AJAX w Pythonie?
Wyjaśnij swoje wymagania (i dlaczego). Czy chcesz wdrożyć pełny stos na poziomie aplikacji, czy możesz użyć np. Apache? Wyjaśnij więcej, czego potrzebujesz * I dlaczego. * Wreszcie, kiedy masz tag "websocket", masz na myśli to czy był to tylko niepoprawny tag do użycia? –
Bez używania * żadnych * bibliotek? Na pewno 'gniazdo' będzie wymagane na minimalnym poziomie? – geoffspear
Sprawdź stronę [tę dokumentację] (http://docs.python.org/library/simplehttpserver.html), tutaj zakładam, że "dowolne biblioteki" to biblioteki, których nie ma w instalacji Pythona. –