Невозможно отправить файл в Python [Работа на Java] - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в Python, и я пытался сделать почтовый запрос в Python, отправив файл xml вместе с запросом. В Java я мог отлично сделать это с помощью приведенного ниже фрагмента кода

String url = "https://www.test.com"
URL object = new URL(url);
HttpURLConnection conn = (HttpURLConnection) object.openConnection();

conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "application/xml");
conn.setRequestProperty("Accept", "application/xml");
conn.setRequestMethod("POST");

BufferedReader br = new BufferedReader((new FileReader("D:\\test.xml")));
String line1;
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
while ((line1 = br.readLine()) != null) {
    wr.write(line1);
    }

wr.flush();
wr.close();

int HttpResult = conn.getResponseCode();

Чтобы заставить его работать в Python, я пробовал разные способы. Ни один из них не работал

    headers = {"Content-type": "application/xml",
                "Accept": "application/xml",
                }
    url = "https://www.test.com"
    filePath = "D:\\test.xml"
    file_data = [('file', (filePath, open(filePath), 'application/xml'))]
    resp = requests.post(url = url, files=file_data, headers=headers)

    print("resp=",resp.url)
    print("resp=",resp)

И еще несколько вариантов

    files = {'file':(filePath, open(filePath, 'rb'))}
    files = {'file': (filePath, open(filePath, 'rb'), 'application/xml', {'Accept': 'application/xml'})}

Даже я пытался отправить файл как данные. Но безрезультатно.

    data = open("D:\\test.xml", 'rb').read()
    resp = requests.post(url = url, data=data, headers=headers)

Помогите, пожалуйста, понять, в чем я ошибаюсь. Я уже часами ломаю себе голову. К вашему сведению: я использую Python 3.6.1

1 Ответ

0 голосов
/ 19 июня 2020

Просматривая официальную документацию requests, я могу найти этот пример (адаптированный для вашего случая):

url = "https://www.test.com"
filePath = "D:\\test.xml"
files = {'file': (filePath, open(filePath, 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)

Исходный пример быстрого запуска находится здесь:
https://requests.readthedocs.io/en/master/user/quickstart/#post -a-multipart-кодированный-файл

...