CURL против MIME: размещение файла - PullRequest
0 голосов
/ 31 марта 2020

Вопрос

Я написал очень простой API, используя Flask, и я хотел бы загрузить в него файл, используя команду POST. Я могу легко заставить его работать, используя cURL, но не так сильно, используя приложение logi c.

Я использовал Mozilla MIME Guide , пытаясь создать HTTP-вызов, но я Я не уверен, что использовать в заголовке и теле.

Что я знаю:

  • Я хотел бы иметь возможность отправлять файлы любого типа, поэтому я думаю, что должен использовать следующее:
    • Content- Тип: application / octet-stream
    • Содержание-Расположение: вложение; filename = "filename.xxx"
  • У меня есть файл, закодированный с Base64, поэтому мне нужно как-то написать это и поместить его в тело
  • Я бы хотел использовать куски. Имеет ли это какое-то значение?

Мой API

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/', methods=['POST'])
def print_hello():

        if request.files:
                request.files['file'].save("/home/ebbemonster/cool_file.txt")
                return "Hello World"
        return "Goodbye World"

if __name__=="__main__":
        app.run(host='0.0.0.0')

cURL

curl -X POST 13.81.62.87:5000 -F file=@GH019654.MP4

Logi c Приложение

enter image description here

1 Ответ

0 голосов
/ 31 марта 2020

Итак, я понял, как преобразовать cURL POST в HTTP-заголовок / тело.

Извлечение заголовка / подробностей тела

# Logging post call
curl -X POST XX.XX.XX.XX:5000 -F file=@GH019654.MP4 --trace-ascii post.log

# Fetching header
head -n 30 post.log

=> Send header, 216 bytes (0xd8)
0000: POST / HTTP/1.1
0011: Host: XX.XX.XX.XX:5000
0029: User-Agent: curl/7.58.0
0042: Accept: */*
004f: Content-Length: 300745456
006a: Content-Type: multipart/form-data; boundary=--------------------
00aa: ----ec1aab65fb2d68fd
00c0: Expect: 100-continue

# Fetching body
sed -n '18,25p' post.log

0000: --------------------------ec1aab65fb2d68fd
002c: Content-Disposition: form-data; name="file"; filename="GH019654.
006c: MP4"
0072: Content-Type: application/octet-stream
009a:
009c: ....ftypmp41 ...mp41....mdatGPRO@...HD7.01.01.70.00LAJ9022436601
00dc: 517...................................1...US.8'.f..C328132710684
011c: 1.HERO7 Black........................E.....1...US.8'.f..........

# Fetching end of body
tail -n 30 google.log

02c2: --------------------------ec1aab65fb2d68fd--
== Info: HTTP 1.0, assume close after body

Logi c Заголовок приложения / тело

enter image description here

...