2010-01-23 33 views
18

Tôi đang chuyển đổi ứng dụng Python2.6 thành ứng dụng Python3 và tôi gặp sự cố với máy chủ. Tôi đã quản lý để có được nó phục vụ lên GET yêu cầu tốt nhưng POST tiếp tục lảng tránh tôi. Dưới đây là những gì tôi bắt đầu với trong 2.6 mà làm việc nhưng trong 3.x máy chủ bình thường không xử lý yêu cầu POST. Từ việc đọc hướng dẫn sử dụng Python, có vẻ như tôi phải sử dụng một lớp máy chủ CGI thay vào đó và cũng ánh xạ các kịch bản lệnh tới thư mục đó. Tôi không muốn phải làm điều này nhưng tôi không thể tìm thấy một cách khác. Tui bỏ lỡ điều gì vậy?Ví dụ POST3 http.server POST Python

def do_POST(self): 
    ctype, pdict = cgi.parse_header(self.headers.get('content-type')) 
    if ctype == 'multipart/form-data': 
     query = cgi.parse_multipart(self.rfile, pdict) 

    self.send_response(301) 

    self.end_headers() 
    upfilecontent = query.get('upfile') 
    print("filecontent", upfilecontent[0]) 
    self.wfile.write("<HTML>POST OK.<BR><BR>"); 
    self.wfile.write(upfilecontent[0]); 
+0

Theo cách nào máy chủ thông thường không xử lý các yêu cầu đăng trong Python 3, nó có trong Python 2? Bạn có thể giải thích vấn đề là gì không? –

+0

Vâng, nó sẽ không hàm ý một hàm do_post() trong khi hàm từ Python2 sẽ. Không có ví dụ mã rắn nào về cách khắc phục nó trong tài liệu Python và Googling vì nó cũng không giúp được gì. – Teifion

Trả lời

15

Sau khi chọc và thêm vài giờ googling, tôi đã tìm thấy các tác phẩm sau.

def do_POST(self): 
    length = int(self.headers['Content-Length']) 
    post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8')) 
    # You now have a dictionary of the post data 

    self.wfile.write("Lorem Ipsum".encode("utf-8")) 

Tôi ngạc nhiên vì điều này dễ đến mức nào.