2015-11-12 73 views
0

我試圖在使用BaseHTTPRequestHandler的Python POST請求後檢索響應。爲了簡化問題,我有兩個PHP文件。Python:從BaseHTTPRequestHandler檢索POST響應

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:'[email protected]' 
       }, 
       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,我可以發送POST請求jquery_post.php和成功檢索請求。現在,我想獲得相同的結果,將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(「收到!」)。我究竟做錯了什麼?


編輯:

總之,我使用BaseHTTPRequestHandler得到一個POST請求和發送響應這個小Python代碼。

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 --data "param1=value1&param2=value2" localhost:9080 

響應,但使用AJAX/jQuery的從一個網頁,我不能得到它(服務器接收到的POST請求correcty,但網頁不檢索響應)。我該怎麼做?

+0

嘗試翻轉線 self.wfile.write( 「收到!」) self.send_response(200) 到 self.send_response(200) self.wfile.write( 「收到!」) – gipsy

+0

翻轉線沒有幫助...相同的結果。 – sysseon

回答

0

好的,問題是CORS標題,只要我從不同的端口(或類似的東西)請求。問題解決加入

self.send_header('Access-Control-Allow-Credentials', 'true') 
self.send_header('Access-Control-Allow-Origin', '*') 

我的響應標題。