POST-запрос с файлом в Python - PullRequest
0 голосов
/ 29 апреля 2020

Хотел вызвать метод Post в моем существующем API, который отлично работает с PostMan, но теперь я хотел передать содержимое тела как тип файла.

Текущий, когда я добавил заголовки в запрос. после этого я получаю исключение 400 неверных запросов, но когда я удаляю заголовки, мне выдается 415 тип носителя, который я не могу понять. Может ли кто-нибудь помочь мне в этом.

Мой рабочий код упоминается здесь:

import os
import logging
import requests
from requests.auth import HTTPBasicAuth

config_directory = 'my-laptp-location\where-i-have\all-mt-files'
url = 'http://localhost:8080/api/v1/update'
usr = 'user'
passwd = 'pass'

for fileName in os.listdir(config_directory):
    print('Processing file: ', fileName)
    headers={'Content-type':'application/json', 'Accept':'application/json'}

    abs_path = os.path.abspath(os.path.join(config_directory, fileName))

    # files = {'file': (abs_path, open(abs_path, 'rb'), 'application/json', {'Expires': '0'})}
    # I tried the above as well but It also throw media type exception
    with open(abs_path, 'rb') as f:
        r = requests.post(calling_url, files={abs_path: f}, auth=HTTPBasicAuth(usr,passwd),headers=headers)
        print(r.status_code)

Мой файл, если я выполняю vi abs_path:

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
}

Это всего лишь простой JSON не массив без вложенности.

1 Ответ

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

Ниже код работает на меня, на самом деле, я не уверен на 100%, почему это не сработало, прежде чем я все тоже попробовал, возможно, я упустил что-то, что до сих пор не совсем понято.

Надеюсь в будущем это может помочь немногим.

import os
import logging
import requests
from requests.auth import HTTPBasicAuth

config_directory = 'my-laptp-location\where-i-have\all-mt-files'
url = 'http://localhost:8080/api/v1/update'
usr = 'user'
passwd = 'pass'

for fileName in os.listdir(config_directory):
    print('Processing file: ', fileName)
    headers={'Content-type':'application/json'}

    abs_path = os.path.abspath(os.path.join(config_directory, fileName))

    with open(abs_path, 'rb') as f:
        r = requests.post(calling_url, headers=headers, auth=HTTPBasicAuth(usr, passwd), data=f)
        print(r.status_code)
        print(r.content)
...