<p><strong>更新</strong></p>
<p>根据你在下面发布的代码,这里有一个有效的答案。在</p>
<pre><code>#!/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()
</code></pre>
<p>跟邮递员打电话
<a href="https://i.stack.imgur.com/sQbmm.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/sQbmm.png" alt="enter image description here"/></a></p>
<p>命令行输出是</p>
<blockquote>
<pre><code>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
</code></pre>
</blockquote>
<p>我综合了以下答案:
引用<a href="https://gist.github.com/huyng/814831" rel="nofollow noreferrer">one</a>、<a href="https://gist.github.com/huyng/814831#gistcomment-2177010" rel="nofollow noreferrer">two</a>和{a4}
这也是非常重要的:
<a href="https://docs.python.org/3/library/http.server.html" rel="nofollow noreferrer">https://docs.python.org/3/library/http.server.html</a></p>
<blockquote>
<p>http.server is not recommended for production. It only implements basic security checks.</p>
</blockquote>
<p>我相信对于一个小的实现和一些测试或者概念验证来说是可以的,但是最终您需要更好地管理这个问题,也许我可以建议您花一些时间使用<a href="http://flask.pocoo.org/" rel="nofollow noreferrer">Flask</a>,它实际上是一个用于Python API构建和原型设计的非常好而且非常轻的框架。在</p>
<h2>-在</h2>
<h2><strong>上一个答案(上面已弃用并更新)</strong></h2>
<p>-</p>
<p>根据对<a href="https://gist.github.com/bradmontgomery/2219997" rel="nofollow noreferrer">this</a>一个非常简单的引用:</p>
^{pr2}$
<p>更新(不带和API):</p>
<p>假设您在或计算机上运行的自定义端口的URL处有一个自定义尾随部分,那么“纯”python将如下所示:</p>
<pre><code>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()
</code></pre>
<p>我假设这样你可以自由地重用变量。同时检查参考文献<a href="https://stackoverflow.com/questions/43640970/cant-get-post-parameters">here</a>,布伦达的答案。在</p>