Tôi cần triển khai một ứng dụng giống như máy chủ web rất đơn giản bằng Python sẽ thực hiện các yêu cầu và phản hồi HTTP cơ bản và hiển thị đầu ra rất cơ bản trên trang web. Tôi không quá lo lắng về việc thực sự mã hóa nó bằng Python, nhưng tôi không chắc bắt đầu từ đâu? Làm thế nào để thiết lập này? Một tập tin? Nhiều tệp? Tôi đoán tôi không có ý tưởng làm thế nào để tiếp cận thực tế rằng đây là một "máy chủ" - vì vậy tôi không quen với cách tiếp cận đối phó với yêu cầu HTTP/socket/xử lý yêu cầu, vv Bất kỳ lời khuyên? Tài nguyên?Làm cách nào để triển khai một máy chủ web đơn giản bằng Python mà không cần sử dụng bất kỳ thư viện nào?
Trả lời
Bạn có thể sử dụng socket programming cho mục đích này. Đoạn sau tạo một ổ cắm tcp và lắng nghe trên cổng 9000 cho các yêu cầu http:
from socket import *
def createServer():
serversocket = socket(AF_INET, SOCK_STREAM)
serversocket.bind(('localhost',9000))
serversocket.listen(5)
while(1):
(clientsocket, address) = serversocket.accept()
clientsocket.send("HTTP/1.1 200 OK\n"
+"Content-Type: text/html\n"
+"\n" # Important!
+"<html><body>Hello World</body></html>\n")
clientsocket.shutdown(SHUT_WR)
clientsocket.close()
serversocket.close()
createServer()
Khởi động máy chủ, $ python server.py
. Mở http://localhost:9000/
trong trình duyệt web của bạn (hoạt động với tư cách khách hàng). Sau đó, trong cửa sổ trình duyệt, bạn có thể thấy văn bản "Hello World" (phản hồi http).
EDIT ** Đoạn mã trên chỉ được thử nghiệm trên chrome, và như các bạn gợi ý về các trình duyệt khác, mã đã được sửa đổi như sau:
- Để thực hiện các phản ứng http-cũng như bạn có thể gửi ở đồng bằng tiêu đề với phiên bản http 1.1, mã trạng thái 200 OK và nội dung kiểu văn bản/html.
- Ổ cắm ứng dụng khách cần phải đóng khi nhận được phản hồi vì đó là cổng TCP.
- Để đóng đúng client socket,
shutdown()
cần phải được gọi socket.shutdown vs socket.close
Sau đó mã đã được thử nghiệm trên chrome, firefox (http://localhost:9000/) và curl đơn giản trong thiết bị đầu cuối (cuộn tròn http://localhost:9000).
-1. Bạn đã thử cái này chưa? Điều này không hiệu quả chút nào; đó là một máy chủ socket, nhưng không nói HTTP. – Ashe
Nó không thực sự nói HTTP, vì vậy hầu như mọi trình duyệt sẽ không làm việc với điều này. Nó không hoạt động trong Chrome. Nó chỉ hoạt động trong Firefox nếu bạn nhấn nút Stop. Đây không phải là máy chủ web. – Ashe
Tôi đã sao chép tập lệnh của bạn chạy nó và tôi nhận được một lỗi nói rằng 'một đối tượng giống như byte được yêu cầu không phải là 'str'' làm thế nào để sửa lỗi này? – Simon
Bạn nên xem mô-đun SimpleHttpServer (py3: http.server).
Tùy thuộc vào những gì bạn đang cố gắng làm, bạn chỉ có thể sử dụng hoặc kiểm tra nguồn của mô-đun (py2, py3) để biết các ý tưởng.
Nếu bạn muốn nhận được cấp thấp hơn, SimpleHttpServer mở rộng BaseHttpServer (source) để làm cho nó hoạt động.
Nếu bạn muốn nhận được thậm chí nhiều hơn cấp thấp, hãy xem SocketServer (nguồn: py2, py3).
Mọi người thường chạy python như python -m SimpleHttpServer
(hoặc python3 -m http.server
) nếu họ chỉ muốn chia sẻ thư mục: đó là một máy chủ đơn giản và đầy đủ chức năng.
Tôi có thể nói bạn nên kiểm tra tài liệu HTTP trước. như RFC. – zinking
- 1. Triển khai dịch vụ web java mà không cần sử dụng máy chủ web
- 2. Thư viện máy chủ AtomPub đơn giản
- 3. Bất kỳ thư viện python dhcp nào?
- 4. Tệp chiến dịch có thể được triển khai trên bất kỳ máy chủ nào không?
- 5. Làm thế nào để triển khai một máy chủ tối thiểu cho AJAX bằng Python?
- 6. Làm cách nào để triển khai EJB trên máy chủ?
- 7. Triển khai mã máy chủ đơn giản cho Heroku
- 8. Làm thế nào để bạn triển khai một trang web cho máy chủ web của bạn?
- 9. Làm cách nào để triển khai plugin .net mà không cần sử dụng AppDomains?
- 10. Máy chủ web đơn giản trong C++?
- 11. Máy chủ web Python đơn giản để lưu tệp
- 12. Cần một ví dụ đơn giản "Hello World" bằng cách sử dụng thư viện Webkit trong Python
- 13. Thư viện AJAX phía máy chủ Python?
- 14. Có bất kỳ Websocket C# nào triển khai tốt không?
- 15. Việc triển khai MIDI đơn giản miễn phí trong Java ngoài javax.sound.midi: Có bất kỳ phần mềm nào không?
- 16. Sử dụng clojure.math.numeric-tower hoặc bất kỳ thư viện nào
- 17. JavaScript nhận lớp yếu tố mà không cần bất kỳ thư viện nào
- 18. Máy chủ hình ảnh đơn giản
- 19. Làm cách nào để triển khai ListView mà không có ListActivity? (chỉ sử dụng Hoạt động)
- 20. Viết một máy chủ web đơn giản trong Ruby
- 21. Java: Cách đánh giá một biểu thức EL - độc lập (bên ngoài bất kỳ khuôn khổ web nào) mà không cần triển khai giao diện?
- 22. Làm thế nào để viết một máy chủ web đơn giản trong Erlang?
- 23. Cách đơn giản nhất để SSH bằng Python là gì?
- 24. Triggering một download file mà không cần bất kỳ yêu cầu máy chủ
- 25. Làm thế nào để bạn tạo một Ứng dụng khách Google Talk đơn giản bằng cách sử dụng thư viện Twisted Words Python?
- 26. Làm thế nào để triển khai một webapp python với các phụ thuộc bằng cách sử dụng virtualenv?
- 27. Có cách nào đơn giản hơn để triển khai cho WebSphere không?
- 28. Làm cách nào để triển khai một chương trình cấp phép đơn giản?
- 29. Thư viện Java (hoặc bất kỳ lang nào) để hiển thị các trang web ngoại tuyến?
- 30. Cách sử dụng SDWebImage mà không cần bất kỳ bộ nhớ cache nào cho một ví dụ
Giải thích thêm các yêu cầu của bạn (và tại sao). Bạn có muốn triển khai ngăn xếp cấp ứng dụng đầy đủ hay bạn có thể sử dụng ví dụ: Apache? Giải thích thêm những gì bạn cần * Và tại sao. * Cuối cùng, khi bạn có thẻ "websocket", bạn có ý đó hay chỉ là một thẻ không chính xác để sử dụng? –
Nếu không sử dụng * bất kỳ * thư viện nào? Chắc chắn 'socket' sẽ được yêu cầu ở mức tối thiểu? – geoffspear
kiểm tra [tài liệu này] (http://docs.python.org/library/simplehttpserver.html) trang, ở đây tôi giả định rằng "bất kỳ thư viện" là thư viện không được bao gồm trong cài đặt python. –