2015-11-12 5 views
0

Я пытаюсь получить ответ после запроса POST с помощью Python с помощью BaseHTTPRequestHandler. Чтобы упростить задачу, у меня есть два файла PHP.Python: получить ответ POST от BaseHTTPRequestHandler

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, но я не могу получить ответ («Received!») В jquery_send.php. Что я делаю не так?


EDIT:

Короче говоря, у меня есть немного кода 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 --data "param1=value1&param2=value2" localhost:9080 

, но я не могу получить его с помощью Ajax/JQuery с веб-страницы (сервер получает запрос POST correcty, но веб-страница не получить ответ). Как мне это сделать?

+0

Попробуйте листать линий self.wfile.write ("Received!") self.send_response (200) к self.send_response (200) self.wfile.write ("Received!") – gipsy

+0

Flipping линии не помогли ... тот же результат. – sysseon

ответ

0

Хорошо, проблема была в заголовках CORS, если я запрашивал у другого порта (или что-то в этом роде ...). Проблема решена, добавив

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

к моим ответным заголовкам.