Python:从 BaseHTTPRequestHandler 检索 POST 响应
Python: Retrieve POST response from BaseHTTPRequestHandler
我正在尝试使用 BaseHTTPRequestHandler 在 Python 的 POST 请求后检索响应。为了简化问题,我有两个 PHP 个文件。
jquery_send.php
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
function sendPOST() {
url1 = "jquery_post.php";
url2 = "http://localhost:9080";
$.post(url1,
{
name:'John',
email:'john@email.com'
},
function(response,status){ // Required Callback Function
alert("*----Received Data----*\n\nResponse : " + response + "\n\nStatus : " + status);
});
};
</script>
</head>
<body>
<button id="btn" onclick="sendPOST()">Send Data</button>
</body>
</html>
jquery_post.php
<?php
if($_POST["name"])
{
$name = $_POST["name"];
$email = $_POST["email"];
echo "Name: ". $name . ", email: ". $email; // Success Message
}
?>
使用 jquery_send.php,我可以向 jquery_post.php 发送 POST 请求并检索请求成功。现在,我想获得相同的结果,将 POST 请求发送到 Python BaseHTTPRequestHandler 而不是 jquery_post.php。我正在使用此 Python 代码进行测试:
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print("\n----- Request Start ----->\n")
content_length = self.headers.getheaders('content-length')
length = int(content_length[0]) if content_length else 0
print(self.rfile.read(length))
print("<----- Request End -----\n")
self.wfile.write("Received!")
self.send_response(200)
port = 9080
print('Listening on localhost:%s' % port)
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
我可以得到 POST 请求,但我无法在 jquery_send.php 中检索响应 ("Received!")。我做错了什么?
编辑:
简而言之,我有这个 Python 代码使用 BaseHTTPRequestHandler 来获取 POST 请求并发送响应。
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print(self.rfile.read(int(self.headers['Content-Length'])).decode("UTF-8"))
content = "IT WORKS!"
self.send_response(200)
self.send_header("Content-Length", len(content))
self.send_header("Content-Type", "text/html")
self.end_headers()
self.wfile.write(content)
print "Listening on localhost:9080"
server = HTTPServer(('localhost', 9080), RequestHandler)
server.serve_forever()
我可以用 curl 得到响应
curl --data "param1=value1¶m2=value2" localhost:9080
但我无法使用网页中的 ajax/jquery 获取它(服务器接收到正确的 POST 请求,但网页未检索到响应)。我该怎么做?
好的,问题出在 CORS headers,只要我从不同的端口(或类似的东西......)请求。添加
问题解决
self.send_header('Access-Control-Allow-Credentials', 'true')
self.send_header('Access-Control-Allow-Origin', '*')
我的回复 headers。
我正在尝试使用 BaseHTTPRequestHandler 在 Python 的 POST 请求后检索响应。为了简化问题,我有两个 PHP 个文件。
jquery_send.php
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
function sendPOST() {
url1 = "jquery_post.php";
url2 = "http://localhost:9080";
$.post(url1,
{
name:'John',
email:'john@email.com'
},
function(response,status){ // Required Callback Function
alert("*----Received Data----*\n\nResponse : " + response + "\n\nStatus : " + status);
});
};
</script>
</head>
<body>
<button id="btn" onclick="sendPOST()">Send Data</button>
</body>
</html>
jquery_post.php
<?php
if($_POST["name"])
{
$name = $_POST["name"];
$email = $_POST["email"];
echo "Name: ". $name . ", email: ". $email; // Success Message
}
?>
使用 jquery_send.php,我可以向 jquery_post.php 发送 POST 请求并检索请求成功。现在,我想获得相同的结果,将 POST 请求发送到 Python BaseHTTPRequestHandler 而不是 jquery_post.php。我正在使用此 Python 代码进行测试:
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print("\n----- Request Start ----->\n")
content_length = self.headers.getheaders('content-length')
length = int(content_length[0]) if content_length else 0
print(self.rfile.read(length))
print("<----- Request End -----\n")
self.wfile.write("Received!")
self.send_response(200)
port = 9080
print('Listening on localhost:%s' % port)
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
我可以得到 POST 请求,但我无法在 jquery_send.php 中检索响应 ("Received!")。我做错了什么?
编辑:
简而言之,我有这个 Python 代码使用 BaseHTTPRequestHandler 来获取 POST 请求并发送响应。
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print(self.rfile.read(int(self.headers['Content-Length'])).decode("UTF-8"))
content = "IT WORKS!"
self.send_response(200)
self.send_header("Content-Length", len(content))
self.send_header("Content-Type", "text/html")
self.end_headers()
self.wfile.write(content)
print "Listening on localhost:9080"
server = HTTPServer(('localhost', 9080), RequestHandler)
server.serve_forever()
我可以用 curl 得到响应
curl --data "param1=value1¶m2=value2" localhost:9080
但我无法使用网页中的 ajax/jquery 获取它(服务器接收到正确的 POST 请求,但网页未检索到响应)。我该怎么做?
好的,问题出在 CORS headers,只要我从不同的端口(或类似的东西......)请求。添加
问题解决self.send_header('Access-Control-Allow-Credentials', 'true')
self.send_header('Access-Control-Allow-Origin', '*')
我的回复 headers。