Как предотвратить Python запросов на переключение на многочастную передачу при загрузке большого файла? - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужно загрузить большой файл на удаленный сервер, используя Python Запросы. Видимо, запросы автоматически переключают тип контента на «multipart / form-data», когда мы используем параметр files:

import io
import requests
from pprint import pprint

r =requests.put('https://httpbin.org/anything/{anything}', 
                files={ 'filename': io.BytesIO(b'many many bytes')})
pprint(r.json())
{'args': {},
 'data': '',
 'files': {'filename': 'many many bytes'},
 'form': {},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Content-Length': '163',
             'Content-Type': 'multipart/form-data; '
                             'boundary=f75a6ed22a9281aab1e6c7288ff34583',
             'Host': 'httpbin.org',
             'User-Agent': 'python-requests/2.23.0',
             'X-Amzn-Trace-Id': 'Root=1-5e8de885-83470619f8a4a57e3351b868'},
 'json': None,
 'method': 'PUT',
 'origin': '80.67.177.9',
 'url': 'https://httpbin.org/anything/{anything}'}

К сожалению, мой сервер не понимает который. Есть ли способ отключить эту функцию, чтобы вернуться к простой загрузке HTTP?

FWIW, файл слишком велик для размещения в основной памяти.

1 Ответ

0 голосов
/ 08 апреля 2020

Python Запрос поддержки потоковая загрузка . Все, что вам нужно сделать, это передать файлоподобный объект в параметре data=, а не в параметре files=, как показано в вопросе:

import io
import requests
from pprint import pprint

r =requests.put('https://httpbin.org/anything/{anything}',
                data=io.BytesIO(b'many many bytes'))
pprint(r.json())
{'args': {},
 'data': 'many many bytes',
 'files': {},
 'form': {},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Content-Length': '15',
             'Host': 'httpbin.org',
             'User-Agent': 'python-requests/2.23.0',
             'X-Amzn-Trace-Id': 'Root=1-5e8df4cc-fb2b5fdd121ba761f97d959a'},
 'json': None,
 'method': 'PUT',
 'origin': '80.67.177.9',
 'url': 'https://httpbin.org/anything/{anything}'}
...