Python Language
पायथन एचटीटीपी सर्वर
खोज…
एक साधारण HTTP सर्वर चलाना
python -m SimpleHTTPServer 9000
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()
फाइलें परोस रहे हैं
मान लें कि आपके पास फ़ाइलों की निम्न निर्देशिका है:
आप इन फ़ाइलों की सेवा के लिए एक वेब सर्वर सेटअप कर सकते हैं:
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()
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 सर्वर चलाएँ:
पायथन-एम सिंपलएचटीपीएसवर 8000
अजगर -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