Tôi đang tạo lại một dịch vụ bằng Python/Flask và đang chạy vào một vấn đề với cách khách hàng hiện có xác thực. Tôi phải khớp với lược đồ khách hàng hiện tại vì lý do tương thích.Buộc loại nội dung hoặc hiển thị request.data trong Flask cho nội dung đã biết
Các khách hàng hiện tại lấy tên người dùng, mật khẩu và mã hóa base64. Đây không phải là Xác thực cơ bản HTTP, mặc dù có vẻ giống nhau. Dưới đây là một số mã mẫu có thể tạo yêu cầu đăng nhập này.
credentials = {
'username': '[email protected]',
'password': 'password'
}
data = b64encode(urlencode(credentials))
request = urllib2.Request(loginURL)
request.add_data(data)
# request.add_header('Content-Type', 'application/gooblygop')
# 'application/x-www-form-urlencoded' seems to be a default Content-Type
login = urllib2.urlopen(request)
Về phía máy chủ, tôi lấy dữ liệu POST và64 để giải mã lại thông tin về tên người dùng và mật khẩu.
flask server:
@app.route('/login', methods=['POST'])
def login():
error = None
if request.method == 'POST':
# post data: cGFzc3dvcmQ9ZGVmYXVsdCZlbWFpbD10ZXN0JTQwZXhhbXBsZS5jb20=
data = b64decode(request.data)
# decoded data: password=default&email=test%40example.com
return('ok')
Vấn đề là Loại nội dung. Nếu tôi chỉ định một loại nội dung không xác định trong ứng dụng khách (application/gooblygop), Flask sẽ hiển thị dữ liệu POST cho request.data và tôi có thể giải mã chuỗi base64. Nếu tôi để Content-Type mặc định (application/x-www-form-urlencoded), dữ liệu thô không được tiếp xúc với request.data và tôi không biết cách lấy chuỗi mã hóa base64 và sử dụng nó.
Phần mềm máy khách hiện có tất cả mặc định khá nhiều đối với x-www-form-urlencoded, nhưng tôi không thể dựa vào điều đó luôn xảy ra.
Về cơ bản, tôi cần một phương thức đáng tin cậy, phía máy chủ để truy cập chuỗi được mã hóa đó bất kể Content-Type mà chương trình khách hàng nói là gì.
Ghi chú khác: Tôi rất mới với Python, đến từ nền PHP. Vì vậy, tôi rất cởi mở với các đề xuất. Ngoài ra, dự án này chủ yếu để sử dụng cá nhân.