如何使用带有预定义边界的 CURL 发送 multipart/mixed?
How to send multipart/mixed with CURL with predifined boudary?
我需要将文件发送到包含 multipart/mixed 内容的服务器。例如:
------------------------------1b479dca9c3e
Content-Disposition: form-data; name="one_part"
Content-Type: text/xml; charset=utf-8
XX-Project-Type: METADATA
<?xml version="1.0" encoding="utf-8"?>
<My_MSG version="1">
<MSG date="2014-08-20T18:39:59.154326+00:00">
<METADATA mess_id="sd1212sd05AZ">
<CONVERSION>
<FILE name="foo.bar"/>
<FILE name="ping.pong"/>
<FILE name="abc.def"/>
</CONVERSION>
</METADATA>
</MSG>
</My_MSG>
------------------------------1b479dca9c3e
Content-Disposition: form-data; name="one_part"
Content-Type: text/xml; charset=utf-8
XX-Project-Type: METADATA
<?xml version="1.0" encoding="utf-8"?>
<My_MSG version="1">
<MSG date="2015-08-20T19:39:59.154326+00:00">
<METADATA mess_id="az987456321">
<CONVERSION>
<FILE name="bar.foo"/>
<FILE name="pong.ping"/>
<FILE name="def.abc"/>
</CONVERSION>
</METADATA>
</MSG>
</My_MSG>
------------------------------1b479dca9c3e--
如您所见,多部分边界已定义到要发送的文件中,因此要使用 CURL 发送它,我使用以下命令:
curl -d @/tmp/exemple.file -XPOST http://myServer:8000/multipartService -H "content-type: multipart/Mixed ; boundary=----------------------------1b479dca9c3e"
但是服务器没有成功处理零件。目前我没有服务器的日志,但我执行 tcpdump 以查看发送到服务器的内容:
发送请求中似乎删除了空格和回车符returns,这可以解释请求内容无法被服务器处理为multipart/mixed...
你知道如何发送符合 multipart/mixed 格式的文件吗?
为 hanshenrik 编辑:
让 curl 自己处理多部分 POST 并让它完全自己处理分隔符。例如,如果您想要 post 两个部分的内容从两个不同的文件中读取,请这样做:
curl -F "part_one=<file1.xml" -F "part_two=<file2.xml" \
http://myServer:8000/multipartService
坚持?
然后你需要和使用--data-binary
.
使用 Flask 框架工作,我在 /add API 端点接收数据。
@app.route('/add', methods=['POST'])
def add():
if request.headers['Content-Type'].startswith('multipart/form-data'):
print("multi-form data")
json_data=request.form.get("json_data")
jd = json.loads(json_data)
file_data=request.form.get("file")
return "200 Ok"
我使用 CURL 发送数据 - 在我的例子中是一个 TEXT 文件 - 二进制将是不同的情况。像这样
#/bin/bash
# Note 2 variables file and json
# file is loaded using < redirection
# Json_Data is a hand crafted dictionary
curl -X POST -H "Content-Type: multipart/form-data" \
-F "file=<MixedContent.sh" \
-F "json_data={\"username\":\"xyz\",\"password\":\"xyz\"}" \
-X POST http://127.0.0.1:5000/add
注意 -F "json_data" 额外的 ' 和 "s
似乎很挑剔
我需要将文件发送到包含 multipart/mixed 内容的服务器。例如:
------------------------------1b479dca9c3e
Content-Disposition: form-data; name="one_part"
Content-Type: text/xml; charset=utf-8
XX-Project-Type: METADATA
<?xml version="1.0" encoding="utf-8"?>
<My_MSG version="1">
<MSG date="2014-08-20T18:39:59.154326+00:00">
<METADATA mess_id="sd1212sd05AZ">
<CONVERSION>
<FILE name="foo.bar"/>
<FILE name="ping.pong"/>
<FILE name="abc.def"/>
</CONVERSION>
</METADATA>
</MSG>
</My_MSG>
------------------------------1b479dca9c3e
Content-Disposition: form-data; name="one_part"
Content-Type: text/xml; charset=utf-8
XX-Project-Type: METADATA
<?xml version="1.0" encoding="utf-8"?>
<My_MSG version="1">
<MSG date="2015-08-20T19:39:59.154326+00:00">
<METADATA mess_id="az987456321">
<CONVERSION>
<FILE name="bar.foo"/>
<FILE name="pong.ping"/>
<FILE name="def.abc"/>
</CONVERSION>
</METADATA>
</MSG>
</My_MSG>
------------------------------1b479dca9c3e--
如您所见,多部分边界已定义到要发送的文件中,因此要使用 CURL 发送它,我使用以下命令:
curl -d @/tmp/exemple.file -XPOST http://myServer:8000/multipartService -H "content-type: multipart/Mixed ; boundary=----------------------------1b479dca9c3e"
但是服务器没有成功处理零件。目前我没有服务器的日志,但我执行 tcpdump 以查看发送到服务器的内容:
发送请求中似乎删除了空格和回车符returns,这可以解释请求内容无法被服务器处理为multipart/mixed...
你知道如何发送符合 multipart/mixed 格式的文件吗?
为 hanshenrik 编辑:
让 curl 自己处理多部分 POST 并让它完全自己处理分隔符。例如,如果您想要 post 两个部分的内容从两个不同的文件中读取,请这样做:
curl -F "part_one=<file1.xml" -F "part_two=<file2.xml" \
http://myServer:8000/multipartService
坚持?
然后你需要--data-binary
.
使用 Flask 框架工作,我在 /add API 端点接收数据。
@app.route('/add', methods=['POST'])
def add():
if request.headers['Content-Type'].startswith('multipart/form-data'):
print("multi-form data")
json_data=request.form.get("json_data")
jd = json.loads(json_data)
file_data=request.form.get("file")
return "200 Ok"
我使用 CURL 发送数据 - 在我的例子中是一个 TEXT 文件 - 二进制将是不同的情况。像这样
#/bin/bash
# Note 2 variables file and json
# file is loaded using < redirection
# Json_Data is a hand crafted dictionary
curl -X POST -H "Content-Type: multipart/form-data" \
-F "file=<MixedContent.sh" \
-F "json_data={\"username\":\"xyz\",\"password\":\"xyz\"}" \
-X POST http://127.0.0.1:5000/add
注意 -F "json_data" 额外的 ' 和 "s
似乎很挑剔