2012-04-10 15 views
6

Python'da basit HTTP istekleri ve yanıtları gerçekleştirecek ve web sayfasında çok temel çıktıları gösterecek çok basit bir web sunucusu benzeri bir uygulama uygulamam gerekiyor. Aslında Python'da kodlama konusunda endişelenmiyorum ama nereden başlayacağımı bilmiyorum. Bunu nasıl kurabilirim? Bir dosya mı? Birden fazla dosya mı? Bunun bir "sunucu" olduğu gerçeğine nasıl yaklaşacağım konusunda hiçbir fikrim yok - bu yüzden HTTP istekleri/soketleri/işleme istekleri, vb. Ile uğraşmaya nasıl yaklaşacağımı bilmiyorum. Herhangi bir öneri? Kaynaklar?Python'u kullanarak herhangi bir kütüphaneyi kullanmadan basit bir web sunucusunu nasıl uygularım?

+0

Gereksinimlerinizi (ve nedenini) açıklayın. Uygulama düzeyinde tüm yığını uygulamak istiyor musunuz, yoksa Apache? İhtiyacınız olan şeyi daha fazla açıklayın * Ve neden. * Son olarak, "websocket" etiketine sahip olduğunuzda, bunu mı kastediyorsunuz yoksa sadece yanlış bir etiket mi kullanıyorsunuz? –

+2

* Herhangi bir * kütüphaneyi kullanmadan? Kesinlikle 'soket' en azından gerekli olacak? – geoffspear

+0

[bu dökümantasyonu] (http://docs.python.org/library/simplehttpserver.html) sayfasını kontrol edin, burada "herhangi bir kütüphanenin" python kurulumuna dahil olmayan kütüphaneler olduğunu varsayalım. –

cevap

2

Bu amaç için socket programming kullanabilirsiniz. Aşağıdaki Snippet'iniz tcp yuva oluşturur ve http istekleri için port 9000 dinlemektedir

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() 
sunucusu, $ python server.py başlatın

. Web tarayıcınızda (istemci olarak işlev görür) http://localhost:9000/'u açın. Ardından tarayıcı penceresinde "Merhaba Dünya" metnini görebilirsiniz (http yanıtı).

DÜZENLEME ** önceki kod yalnızca krom üzerinde test edildi ve siz diğer tarayıcılar hakkında önerildiği gibi kod olarak değiştirildi:

  1. düz gönderebilirler tepki http-benzeri yapmak için http sürüm 1.1, durum kodu 200 Tamam ve içerik türü metin/html ile başlık.
  2. İstemci soketinin, bir TCP soketi olduğu için yanıt gönderildikten sonra kapatılması gerekir.
  3. doğru müşteri soket kapatmak için, shutdown() kodu, krom ile ateş (http://localhost:9000/) ve terminal basit kıvrılmış (http://localhost:9000 kıvrılmasına) test edilmiştir Daha sonra

socket.shutdown vs socket.close adı edilmesi gerekmektedir.

+2

-1. Bunu denedin mi? Bu hiç işe yaramıyor; Bu bir soket sunucusu, ama HTTP konuşmuyor. – Ashe

+3

Aslında HTTP konuşmuyor, bu yüzden hemen hemen her tarayıcı bununla çalışmaz. Chrome'da çalışmıyor. Stop düğmesine basarsanız sadece Firefox'ta çalışır. Bu bir web sunucusu değil. – Ashe

+0

Komut dosyanızı kopyaladım ve bir bayt benzeri nesne gerekli değil diyerek hata alıyorum '' str '' bunu nasıl düzeltirim? – Simon

8

SimpleHttpServer (py3: http.server) modülüne bakmalısınız.

Yapmaya çalıştığınız şeye bağlı olarak, yalnızca bunu kullanabilir veya fikirlerin kaynağı için modülün kaynağını (py2, py3) kontrol edebilirsiniz.

Daha düşük düzey almak istiyorsanız, SimpleHttpServer yalnızca çalışmasını sağlamak için BaseHttpServer (source) 'i genişletir.

sen bile daha düşük seviyeli olsun SocketServer (kaynak: py2, py3) bakmak istiyorum.

İnsanlar sadece bir dizini paylaşmak istiyorlarsa python'u python -m SimpleHttpServer (veya python3 -m http.server) gibi çalıştıracaklardır: tamamen işlevsel ve basit bir sunucu.

+0

Muhtemelen öncelikle HTTP belgelerini kontrol etmeniz gerektiğini söyleyebilirim. RFC gibi. – zinking