Jak prawidłowo wysłać plik metodą PUT

0

Witam
Mam problem z wysłaniem pliku metodą PUT. Za każdym razem serwer zgłasza błąd lub odrzuca mojego requesta.
Na początku robiłem to tak:

self.send_put('/api/license', files={'file': 'Licencja'})

serwer zgłasza mi takie coś:

{'request_body': b'--236c7ae1fadb25d54beae19def523219\r\nContent-Disposition:'
                 b' form-data; name="file"; filename="file"\r\n\r\nLicencja'
                 b'\r\n--236c7ae1fadb25d54beae19def523219--\r\n',
 'request_headers': {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '159', 'Content-Type': 'multipart/form-data; boundary=236c7ae1fadb25d54beae19def523219'},
 'request_method': 'PUT',
 'request_url': 'http://xx.xx.xx.xx/api/license',
 'response_code': 500,
 'response_content': '{"message":"ReadingFileFailed"}'}

Następnie spróbowałem z parametrem data=''; tak samo.

Kolejne podejście to:

        with open('Licencja', 'rb') as data:
            self.send_put('/api/license', data=data)

serwer odpowiada:

{'request_body': <_io.BufferedReader name='Licencja'>,
 'request_headers': {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '1408'},
 'request_method': 'PUT',
 'request_url': 'http://xx.xx.xx.xx/api/license',
 'response_code': 400,
 'response_content': '{"message":"IncorrectInput"}'}

Szukam różnych rozwiązań i żadne mi nie działa. Dodam że postmanem jest wstanie wysłać prawidłowo plik. Oznacza to że to ja robię coś źle tylko nie jestem wstanie dostrzec co robię źle.

Jak prawidłowo i skutecznie wysłać plik za pomocą metody put do REST API ?

0

A co to send_put?

1

Jak Postmanem Ci wychodzi to niech Ci wygeneruje kod.

0

A co to za api i co mówi dokumentacja tego API? Możesz Fiedlerem złapać requesta i zobaczyć jak wygląda twój a jak takie co przechodzi.

0

@Saalin: kurcze dzięki to rozwiązało moje wszystkie problemy. Wiem gdzie popełniałem błąd. Kłania się nie znajomość narzędzia. Generalnie źle wczytywałem plik dlatego API mnie z tym wywalało. A dla potomnych rozwiązanie:

import requests

url = "http://xx.xx.xx.xx:yyyy/api/...../"
files = [('file', ('Licencja', open('/ścieżka/do/pliku/Licencja', 'rb'), 'application/octet-stream'))]
response = requests.request("PUT", url, files=files)
print(response.text)

1 użytkowników online, w tym zalogowanych: 0, gości: 1