Я хочу использовать Python 2.7 без каких-либо модулей, не входящих в стандартную библиотеку, для загрузки файла на веб-сервер (который будет принимать такие запросы). Я знаю, что это можно сделать, загрузив данные как часть данных формы из нескольких частей, но мне интересно, могу ли я просто POST
с Content-Type: application/pdf
(например) и Content-Length
установить длину файла и, иметь контент почты просто будет содержанием файла (в данном случае PDF). Если да, то какой самый простой способ сделать это?Загрузите содержимое файла в Python
1
A
ответ
2
Если сервер будет принимать прямые сообщения полезной нагрузки (в отличие от файла, являющегося частью запроса multipart/form-data
POST), вы можете просто установить параметр Request()
данных в качестве файла данных:
import urllib2
with open(filename, 'rb') as uploadfile:
request = urllib2.Request(url, data=uploadfile.read(),
{'Content-Type': 'application/pdf'})
response = urllib2.urlopen(request)
urllib2.Request
объект не делает никаких предположений о содержании data
, кроме этого заголовок Content-Type
будет установлен в application/x-www-form-urlencoded
, если установлен data
, если только вы не предоставите свой собственный.
Заголовок Content-Length
будет установлен для вас, когда вы это сделаете.
* Мне интересно, могу ли я просто POST с Content-Type: application/pdf * До * веб-сервера * принимать это или нет. Если сервер принимает только «multipart/form-data» для загрузки файлов, вы не можете заставить сервер принимать что-то еще. –
Сначала определите, принимает ли сервер прямые сообщения без многостраничной полезной нагрузки. Вы можете сделать это, используя Postman (расширение Chrome) или библиотеку '' запрос '' Python ', или даже с 'urllib2' из стандартной библиотеки. Тогда ограничьте себя только stdlib, если вы действительно должны. –
Возможны прямые загрузки. Просто установите параметр '' urllib2.Request() 'data (https://docs.python.org/2/library/urllib2.html#urllib2.Request) в содержимое вашего файла (открытое как двоичное) и установите Заголовок Content-Type. Готово. –