2012-04-10 8 views
6

मुझे पायथन में एक बहुत ही सरल वेब-सर्वर-जैसे ऐप को लागू करने की आवश्यकता है जो मूल HTTP अनुरोध और प्रतिक्रियाएं करेगा और वेब पेज पर बहुत ही मूल आउटपुट प्रदर्शित करेगा। मैं वास्तव में पाइथन में कोडिंग के बारे में बहुत चिंतित नहीं हूं, लेकिन मुझे यकीन नहीं है कि कहां से शुरू करना है? इसे कैसे सेट करें? एक फाइल? एकाधिक फाइलें? मुझे लगता है कि मुझे इस बात से कोई जानकारी नहीं है कि यह एक "सर्वर" है - इसलिए मैं HTTP अनुरोध/सॉकेट/प्रोसेसिंग अनुरोधों आदि से निपटने के तरीके से अपरिचित हूं। कोई सलाह? संसाधन?किसी भी पुस्तकालयों का उपयोग किए बिना पाइथन का उपयोग करके मैं एक सरल वेब सर्वर को कैसे कार्यान्वित कर सकता हूं?

+0

अपनी आवश्यकताओं को और जानें (और क्यों)। क्या आप पूर्ण एप्लिकेशन-स्तरीय स्टैक को कार्यान्वित करना चाहते हैं, या आप इसका उपयोग कर सकते हैं उदा। अमरीका की एक मूल जनजाति? आपको जो चाहिए उसे और बताएं * और क्यों। * अंत में, जब आपके पास "websocket" टैग होता है, तो क्या आपका मतलब यह है कि क्या यह उपयोग करने के लिए सिर्फ एक गलत टैग था? –

+2

* किसी भी * पुस्तकालयों का उपयोग किए बिना? निश्चित रूप से कम से कम 'सॉकेट' की आवश्यकता होगी? – geoffspear

+0

[यह दस्तावेज़ीकरण] जांचें (http://docs.python.org/library/simplehttpserver.html) पृष्ठ, यहां मुझे लगता है कि "कोई भी पुस्तकालय" पुस्तकालय हैं जो पायथन स्थापना में शामिल नहीं हैं। –

उत्तर

2

आप इस उद्देश्य के लिए socket programming का उपयोग कर सकते हैं। निम्नलिखित स्निपेट TCP सॉकेट बनाता है और http अनुरोधों के लिए पोर्ट 9000 पर सुनता है:

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() 

सर्वर, $ python server.py शुरू करो। अपने वेब ब्राउज़र में http://localhost:9000/ खोलें (जो क्लाइंट के रूप में कार्य करता है)। फिर ब्राउज़र विंडो में, आप "हैलो वर्ल्ड" (http प्रतिक्रिया) टेक्स्ट देख सकते हैं।

संपादित करें ** पिछले कोड केवल क्रोम पर परीक्षण किया गया था, और जैसा कि आप लोग अन्य ब्राउज़र के बारे में सुझाव दिया, कोड के रूप में संशोधित किया गया था:

  1. प्रतिक्रिया http एक जैसे आप मैदान में भेज सकते हैं बनाने के लिए http संस्करण 1.1 के साथ हेडर, स्टेटस कोड 200 ठीक है और सामग्री-प्रकार टेक्स्ट/एचटीएमएल।
  2. प्रतिसाद देने के बाद ग्राहक सॉकेट को बंद करने की आवश्यकता है क्योंकि यह एक टीसीपी सॉकेट है।
  3. ठीक से ग्राहक सॉकेट को बंद करने के shutdown()socket.shutdown vs socket.close

के नाम से जाना तो कोड, क्रोम पर परीक्षण किया गया था फ़ायरफ़ॉक्स (http://localhost:9000/) और टर्मिनल में सरल कर्ल (कर्ल http://localhost:9000) की जरूरत है।

+2

-1। क्या आपने यह कोशिश की? यह बिल्कुल काम नहीं करता है; यह एक सॉकेट सर्वर है, लेकिन HTTP नहीं बोलता है। – Ashe

+3

यह वास्तव में HTTP बोलता नहीं है, इसलिए लगभग हर ब्राउज़र इसके साथ काम नहीं करेगा। यह क्रोम में काम नहीं करता है। यदि आप स्टॉप बटन दबाते हैं तो यह केवल फ़ायरफ़ॉक्स में काम करता है। यह एक वेब सर्वर नहीं है। – Ashe

+0

मैंने आपकी लिपि की प्रतिलिपि बनाई है और मुझे एक त्रुटि मिल रही है कि 'बाइट-जैसी ऑब्जेक्ट की आवश्यकता नहीं है' 'मैं इसे कैसे ठीक करूं? – Simon

8

आपको SimpleHttpServer (py3: http.server) मॉड्यूल देखना चाहिए।

आप जो करने की कोशिश कर रहे हैं उसके आधार पर, आप या तो इसका उपयोग कर सकते हैं, या मॉड्यूल के स्रोत (py2, py3) विचारों के लिए देख सकते हैं।

यदि आप अधिक निम्न स्तर प्राप्त करना चाहते हैं, तो SimpleHttpServer BaseHttpServer (source) को केवल यह काम करने के लिए बढ़ाता है।

आप, यहां तक ​​कि अधिक निम्न स्तर प्राप्त SocketServer (स्रोत: py2, py3) पर एक नज़र लेने के लिए चाहते हैं।

लोग अक्सर python -m SimpleHttpServer (या python3 -m http.server) जैसे पायथन चलाएंगे यदि वे सिर्फ एक निर्देशिका साझा करना चाहते हैं: यह एक पूरी तरह से कार्यात्मक और ... सरल सर्वर है।

+0

मैं शायद कहूंगा कि आपको पहले HTTP दस्तावेज़ों की जांच करनी चाहिए। आरएफसी की तरह। – zinking

संबंधित मुद्दे

 संबंधित मुद्दे