prolisk
@prolisk
Верстая. Криво.

Как сделать multipart/form-data запрос в python через requests?

Помогите допилить запрос.
Есть api одной закрытой конторы, вот что они пишут:


Запрос:
Тип: POST
Адрес: %Url%/api/app_wrap
Headers:
A2a-auth-token: %TOKEN_KEY%
Content-type: multipart/form-data

POST параметры:
file*, которое содержит апк файл,
params* в котором содержится json объект с параметрами врапа

{
   appId: //application a2a id,
   build: Play/Other
   suffix: ^[\\.a-z0-9_]*[^\\.]$,
   isSoftLaunch: true/false - если указан true, то собирается специальная версия, например сейчас это версия 60,
   isDeviceAdmin: true/false - встраивание device admin,
   deviceAdminText: текст для встраивания device admin
}

Валидация: файл должен иметь расширение *.apk

TOKEN_Key и url у меня есть.

1) что значит маска в suffix?
2) я так понял токен нужно передавать в хедере?
3) контент тайп нужно указывать multipart/form-data ?
4) как пройти валидацию? (или достаточно расширения .apk)
5) сам запрос с передачей файла делаю следующим образом:

head.update(
        {'A2a-auth-token': TOKEN_KEY,
         'Content-type' : 'multipart/form-data',
        }
        )
    wrap_url = 'URL/api/app_wrap/'
    fname = 'Gone in 60 Seconds APK v 1.3.apk'
    fpath='D:\\'+fname
    fpath=open(fpath,'rb')    
    #fpath = fpath.read() #делал и с чтением; на другом сайте через read() заливается
    file = {'file': (fname, fpath, 'application/vnd.android.package-archive')} #делал и просто file = {'file': fpath}
    datasend= {
        'params' : {        

            'appId' : '75595',
                    'build' : 'Play',
                    'suffix' : 'game.0706',
                    'isSoftLaunch': 'false',
                    'isDeviceAdmin': 'false',
            'deviceAdminText' : 'test'           
        }}
    send_apk = requests.post(wrap_url, headers=head, data = datasend, files = file) #делал и вместо datasend просто params с соответствующим изменением кода выше


Без самого сайта конечно сложно что подсказать, но сама логика запроса как вам?
Поддержка не особо разговорчива, написала только что неправильно формирую запрос.
  • Вопрос задан
  • 8945 просмотров
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Нужно делать requests.post с аргументом files
Пример:
requests.post('http://example.com/example/', files={'param_1': (None, 'param 1 value'), 'param_2': (None, 'param 2 value')})

Указывать в заголовках 'Content-type' : 'multipart/form-data', не нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы