1 回答

TA贡献1804条经验 获得超7个赞
您的脚本应如下所示:
注意:有依赖requests_toolbelt
send.py
import argparse
import requests
from requests_toolbelt import MultipartEncoder
parser = argparse.ArgumentParser()
parser.add_argument('message')
parser.add_argument('--files', nargs='+')
args = parser.parse_args()
multipart_form_data_object = MultipartEncoder(
fields=(
('files', (args.files[0], open(args.files[0], 'rb'), "application/json")),
('files', (args.files[1], open(args.files[1], 'rb'), "application/json")),
('message', ('message', open(args.message, 'rb'), 'application/json')),
)
)
res = requests.post('http://localhost:8000', data=multipart_form_data_object, headers={'Content-Type': multipart_form_data_object.content_type})
print(res.content)
我使用 django 对其进行了测试:
urls.py
from django.urls import path
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def dump(request):
data = {name: [o.read().decode('utf8') for o in request.FILES.getlist(name)] for name in request.FILES.keys()}
return JsonResponse(data)
urlpatterns = [
path('', dump),
]
使用以下方法调用它:
curl -s http://127.0.0.1:8000/ -F "message=@$(pwd)/file1" -F "files=@$(pwd)/file2" -F "files=@$(pwd)/file3"
并使用python
python send.py file1 --files file2 file3
相同的输出:
{"files": ["{\\"message\\": \\"hello world\\"}\\n", "something else\\n"], "message": ["hello world\\n"]}
添加回答
举报