2017-07-28 16 views
5

Tôi đang sử dụng phiên yêu cầu với xác thực oauth2. Mọi thứ hoạt động hoàn hảo khi tôi tải lên các tệp nhỏ, nhưng đối với tệp 4GB tôi nhận được lỗi hết hạn mã thông báo, có vẻ như tệp đã được tải lên nhưng tại phần mã thông báo phiên đóng đã được xác thực một lần nữa.Mã hết hạn trước khi tệp được tải lên

Có cơ hội để xử lý tình huống này không? Tải lên tệp lớn với mã thông báo được làm mới trước khi phiên bị đóng hoặc gì đó?

mẫu của mã bên dưới, Cảm ơn bạn rất nhiều vì đã giúp đỡ. Chúc mừng!

import requests 
from io import StringIO 

from requests_toolbelt.multipart.encoder import MultipartEncoder 


TOKEN_PAYLOAD = { 
    'grant_type': 'password', 
    'client_id': '###', 
    'client_secret': '###', 
    'username': '###', 
    'password': '####' 
} 


def get_token(): 
    response = requests.post(
     'https://oauth/token', 
     params=TOKEN_PAYLOAD) 
    response_data = response.json() 
    token = response_data.get('access_token') 
    return token 


# Create test file 
MB = 1024 ** 2 
GB = MB * 1024 

encoded_string = 'x' * 4 * GB 
file_test = StringIO() 
file_test.write(encoded_string) 

# Get token 
token = get_token() 

# Create form 
multipart_data = MultipartEncoder(
    fields={ 
     '--': ('4GB_test.txt', file_test, 'text/plain'), 
     'id': '2217', 
     'fileFieldDefId': '4258', 
    } 
) 

# Create headers 
headers = { 
    "Authorization": "Bearer {}".format(token), 
    'Content-Type': multipart_data.content_type 
} 

session = requests.Session() 

response = session.post(
    'https://oauth2/rest/external/item/multipartUpdate/byId', 
    headers=headers, 
    data=multipart_data, 
) 

print(response) 
# <Response [401]> 

print(response.content) 
# b'{"error":"invalid_token","error_description":"Access token expired: 0f7f6bd9-4e21-407f-4a78347711a9"}' 


# response.close() ? with refreshed token 
# session.close() ? with refreshed token 
+0

Bạn có thể thay đổi phía máy chủ của logic upload hoặc bạn không có quyền kiểm soát nó? –

+0

Không, tôi không có quyền truy cập vào máy chủ, chỉ với các điểm cuối API –

Trả lời

1

Nếu bạn muốn có mã thông báo truy cập hợp lệ để có thêm thời gian, bạn cũng có thể yêu cầu mã thông báo làm mới và sử dụng mã thông báo truy cập mới bất cứ khi nào thẻ cũ hết hạn. Thông thường mã thông báo truy cập có giá trị trong 1 giờ, bạn có thể duy trì bộ hẹn giờ và tạo mã thông báo truy cập mới mỗi khi bộ đếm thời gian của bạn đạt đến 60 phút. Bằng cách đó, bạn có thể có mã thông báo truy cập hợp lệ cho các phiên dài hơn.

Bạn phải sử dụng grant_type=refresh_tokenhttps://tools.ietf.org/html/rfc6749#section-6

+0

Vâng, có thể là vậy, tôi cần kiểm tra xem có hỗ trợ API ứng dụng khách hay không, sẽ đóng này nếu điều này khắc phục được sự cố. Cảm ơn bạn. –

+0

Tuyệt vời, thx cho sự giúp đỡ của bạn, mà sửa chữa vấn đề :), họ phát hành chức năng thẻ làm mới tuần này :) –

Các vấn đề liên quan