खोज…


एक साधारण HTTP सर्वर चलाना

पायथन 2.x 2.3
python -m SimpleHTTPServer 9000
अजगर 3.x 3.0
python -m http.server 9000

इस कमांड को रन करने से पोर्ट 9000 पर करंट डायरेक्टरी की फाइलें 9000

यदि पोर्ट नंबर के रूप में कोई तर्क नहीं दिया जाता है, तो सर्वर डिफ़ॉल्ट पोर्ट 8000 पर चलेगा।

-m झंडा खोज करेंगे sys.path इसी के लिए .py फ़ाइल एक मॉड्यूल के रूप में चलाने के लिए।

यदि आप केवल लोकलहोस्ट पर सेवा करना चाहते हैं तो आपको एक कस्टम पायथन प्रोग्राम लिखना होगा जैसे:

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

HandlerClass = SimpleHTTPRequestHandler
ServerClass  = BaseHTTPServer.HTTPServer
Protocol     = "HTTP/1.0"

if sys.argv[1:]:
   port = int(sys.argv[1])
else:
   port = 8000
server_address = ('127.0.0.1', 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()

फाइलें परोस रहे हैं

मान लें कि आपके पास फ़ाइलों की निम्न निर्देशिका है:

यहाँ छवि विवरण दर्ज करें

आप इन फ़ाइलों की सेवा के लिए एक वेब सर्वर सेटअप कर सकते हैं:

पायथन 2.x 2.3
import SimpleHTTPServer
import SocketServer

PORT = 8000

handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("localhost", PORT), handler)
print "Serving files at port {}".format(PORT)
httpd.serve_forever()
अजगर 3.x 3.0
import http.server
import socketserver

PORT = 8000

handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), handler)
print("serving at port", PORT)
httpd.serve_forever()

SocketServer मॉड्यूल नेटवर्क सर्वर को सेटअप करने के लिए कक्षाएं और कार्यक्षमता प्रदान करता है।

SocketServer का TCPServer क्लास टीसीपी प्रोटोकॉल का उपयोग कर सर्वर सेट करता है। कंस्ट्रक्टर सर्वर के पते (यानी आईपी एड्रेस और पोर्ट) और सर्वर रिक्वेस्ट को हैंडल करने वाले वर्ग को दर्शाने वाला टपल स्वीकार करता है।

SimpleHTTPRequestHandler वर्ग की SimpleHTTPServer मॉड्यूल वर्तमान निर्देशिका में फ़ाइलों को सेवा करने की अनुमति देता है।

स्क्रिप्ट को उसी डायरेक्टरी में सेव करें और चलाएं।

HTTP सर्वर चलाएँ:

पायथन 2.x 2.3

पायथन-एम सिंपलएचटीपीएसवर 8000

अजगर 3.x 3.0

अजगर -m http.server 8000

'-M' ध्वज एक मॉड्यूल के रूप में चलाने के लिए इसी .py 'फ़ाइल के लिए' sys.path 'खोज करेगा।

ब्राउज़र में स्थानीय होस्ट खोलें : 8000 , यह आपको निम्नलिखित देगा:

यहाँ छवि विवरण दर्ज करें

SimpleHTTPServer के प्रोग्रामेटिक एपीआई

क्या होता है जब हम python -m SimpleHTTPServer 9000 निष्पादित करते हैं?

इस प्रश्न का उत्तर देने के लिए हमें SimpleHTTPServer ( https://hg.python.org/cpython/file/2.7/Lib/SimpleHTTPServer.py) और BaseHTTPServer ( https://hg.python.org/cpython/file ) के निर्माण को समझना चाहिए। / 2.7/Lib/BaseHTTPServer.py)

सबसे पहले, अजगर एक तर्क के रूप में 9000 साथ SimpleHTTPServer मॉड्यूल को आमंत्रित करता है। अब SimpleHTTPServer कोड का अवलोकन करते हुए,

def test(HandlerClass = SimpleHTTPRequestHandler,
         ServerClass = BaseHTTPServer.HTTPServer):
    BaseHTTPServer.test(HandlerClass, ServerClass)


if __name__ == '__main__':
    test()

परीक्षण फ़ंक्शन को अनुरोध हैंडलर और सर्वरक्लास के बाद लाया जाता है। अब BaseHTTPServer.test को लागू किया गया है

def test(HandlerClass = BaseHTTPRequestHandler,
         ServerClass = HTTPServer, protocol="HTTP/1.0"):
"""Test the HTTP request handler class.

This runs an HTTP server on port 8000 (or the first command line
argument).

"""

if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('', 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()

इसलिए यहां पोर्ट नंबर, जिसे उपयोगकर्ता तर्क के रूप में पारित करता है, को पार्स किया जाता है और मेजबान पते से जुड़ा होता है। दिए गए पोर्ट और प्रोटोकॉल के साथ सॉकेट प्रोग्रामिंग के आगे बुनियादी कदम उठाए गए हैं। अंत में सॉकेट सर्वर शुरू किया जाता है।

सॉकेटसेवर वर्ग से अन्य वर्गों में विरासत का यह एक बुनियादी अवलोकन है:

    +------------+
    | BaseServer |
    +------------+
          |
          v
    +-----------+        +------------------+
    | TCPServer |------->| UnixStreamServer |
    +-----------+        +------------------+
          |
          v
    +-----------+        +--------------------+
    | UDPServer |------->| UnixDatagramServer |
    +-----------+        +--------------------+

लिंक https://hg.python.org/cpython/file/2.7/Lib/BaseHTTPServer.py और https://hg.python.org/cpython/file/2.7/Lib/ScServerer.py आगे खोजने के लिए उपयोगी हैं जानकारी।

आधार, GST, POST का मूल हैंडलिंग, BaseHTTPRequestHandler का उपयोग कर

# from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer # python2
from http.server import BaseHTTPRequestHandler, HTTPServer # python3
class HandleRequests(BaseHTTPRequestHandler):
    def _set_headers(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        self._set_headers()
        self.wfile.write("received get request")
        
    def do_POST(self):
        '''Reads post request body'''
        self._set_headers()
        content_len = int(self.headers.getheader('content-length', 0))
        post_body = self.rfile.read(content_len)
        self.wfile.write("received post request:<br>{}".format(post_body))

    def do_PUT(self):
        self.do_POST()

host = ''
port = 80
HTTPServer((host, port), HandleRequests).serve_forever()

उदाहरण curl का उपयोग कर आउटपुट:

$ curl http://localhost/
received get request%                                                                                                                                                                                       

$ curl -X POST http://localhost/
received post request:<br>%                                                                                                                                                                                 

$ curl -X PUT http://localhost/
received post request:<br>%                                                                                                                                                                                 

$ echo 'hello world' | curl --data-binary @- http://localhost/
received post request:<br>hello world


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow