Tôi là người mới dùng Python (sử dụng v3.3) và lập trình web và tôi đã phải vật lộn với một vấn đề cả đêm. Tôi đang phát hành một cuộc gọi POST để máy chủ của tôi và gửi nó một số dữ liệu như sau:Làm cách nào để truy cập dữ liệu được gửi đến máy chủ của tôi bằng BaseHTTPRequestHandler?
DATA = {"listName":"Test list","listDesc":"A test list with test stuff in it.","refreshMode":"Replace","DBKey":"1","UserDisplaySeq":"1"}
DATA = json.dumps(DATA)
METHOD = "POST"
DATA = DATA.encode("utf-8")
params = "account_id=acct 2"
try:
URL = "http://localhost:8080/lists?" + quote_plus(params)
request = urllib.request.Request(url=URL,data=DATA,method=METHOD)
response = urllib.request.urlopen(request)
...
Tôi cũng có một bộ xử lý yêu cầu mã hóa như sau (có rất nhiều báo cáo in ở đây cho mục đích gỡ lỗi):
class MyHandler(BaseHTTPRequestHandler):
...
def do_POST(self):
length = int(self.headers['Content-Length'])
print("HEADERS: ", self.headers)
print (str(length))
print(self.rfile)
post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))
print(post_data)
này in kết quả sau vào giao diện điều khiển:
Starting thread
started httpserver...
HEADERS: Accept-Encoding: identity
User-Agent: Python-urllib/3.3
Content-Length: 138
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Connection: close
138
<_io.BufferedReader name=404>
{}
tôi câu hỏi:
1) Trong máy chủ (do_POST), làm cách nào để truy cập dữ liệu tôi cho là tôi đang gửi cùng với yêu cầu của mình (tức là { "Listname": "danh sách thử nghiệm", "listDesc": "Một thử nghiệm ...)
2) là yêu cầu của tôi thậm chí còn gửi dữ liệu ở nơi đầu tiên
3) Có một nơi? nơi này là tài liệu về người mới có thể truy cập?
Bạn có thể thấy rằng việc sử dụng khung web như Flask hoặc Bottle sẽ làm cho công cụ này trở nên dễ dàng hơn nhiều. – Blender
@Blender - Cảm ơn lời khuyên. Tôi đã thử sử dụng Bottle nhưng nó dường như thực sự hướng đến việc sử dụng HTML, trong trường hợp của chúng tôi, chúng tôi không sử dụng. Chúng tôi đang viết một ứng dụng RESTful để cân bằng công việc trên nhiều máy chủ và nó thực sự không có một thành phần trình duyệt. Giống như hầu như tất cả những điều này, tôi cũng tìm thấy tài liệu của Bottle là tuyệt vời nếu bạn đã biết công cụ của bạn nhưng thực sự khó khăn cho người mới bắt đầu không có một nền tảng trong các khái niệm web. – Ben