ОБНОВЛЕНИЕ
В соответствии с кодом, который вы разместили ниже, вот рабочий ответ.
#!/usr/bin/python3
import socketserver
from http.server import BaseHTTPRequestHandler
import time
import threading
def do_something(site_id, first, last, pass1):
print(site_id)
print(first)
print(last)
print(pass1)
#just to illustrate the point and print the variables
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self): # !important to use 'do_POST' with Capital POST
global site_id, first, last, pass1 #those are still undefined at the module level ;) remember this for later
if self.path == '/do_something':
request_headers = self.headers
site_id = request_headers["m_site_name"]
first = request_headers["m_first_name"]
last = request_headers["m_last_name"]
pass1 = request_headers["m_device_name"]
do_something(site_id, first, last, pass1)
self.send_response(200)
self.end_headers() #as of P3.3 this is required
try:
httpd = socketserver.TCPServer(("localhost", 9001), MyHandler)
httpd.serve_forever()
finally:
httpd = socketserver.TCPServer(("localhost", 9001), MyHandler)
httpd.server_close()
Звонок с почтальоном
и вывод командной строки:
C:\Development\Python\test\venv\Scripts\python.exe C:/Development/Python/test/webserver_old.py
1001
jyoti0
127.0.0.1 - - [19/Nov/2018 21:53:45] "POST /do_something HTTP/1.1" 200 -
jyoti1
101
Здесь я соединил ответы из них: Ссылка один , два и третий И это также очень важно прочитать: https://docs.python.org/3/library/http.server.html
http.server не рекомендуется для производства.Он реализует только базовые проверки безопасности.
Я считаю, что это нормально для небольшой реализации и некоторого тестирования или подтверждения концепции, но в конечном итоге вам придется справиться с этим лучше, может быть, я могу предложить вам потратитьНекоторое время и использование Flask на самом деле является превосходной и очень легкой структурой для создания и создания прототипов Python API.
-
Предыдущий ответ (устарело и обновлено выше)
-
Согласно очень легкой и простой ссылке на this one:
def do_POST(self):
# Doesn't do anything with posted data
content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
post_data = self.rfile.read(content_length) # <--- Gets the data itself
self._set_headers()
self.wfile.write("<html><body><h1>POST!</h1></body></html>")
Update (без API и API):
Предполагается, что вы работаете на компьютере или работаете на нестандартном порте с настраиваемой конечной частью по URL, тогда «чистый» python будет выглядеть так:
import SocketServer
from BaseHTTPServer import BaseHTTPRequestHandler
def doSomething():
print "i did"
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self):
if self.path == '/doSomething':
mail = self.request.POST.get('email')
something = self.request.POST.get('something')
doSomething()
self.send_response(200)
httpd = SocketServer.TCPServer(("", 8080), MyHandler)
httpd.serve_forever()
Я предполагаю, что такВы можете использовать переменные свободно.Проверьте также эту ссылку здесь , ответ Бренды.