HTTP POST请求与MultipartFormProvider:如何防止头传输编码:分块的添加吗?

81 Ansichten(30天)的
我想发送一个XML文件通过POST HTTP服务器。预计多部分/格式内容。注意,webwrite是不可能的,因为它(显然)不支持多部分/格式内容。金宝app
发送请求与旋度工作正常:
(s, r) =系统(curl——自定义”172. xx.xx.xxx: xxxx / someaddress吗?一个= = @myfile b - f文件。xml - v - o echo_report.xml”]);
旋度日志(verbose)是这样的:
*在172. xx.xx.xxx: xxxx
* TCP_NODELAY集
*连接到172. xx.xx。xxx (172. xx.xx.xxx)港口xxxx (# 0)
> POST / someaddress吗?a = b HTTP / 1.1
>主持人:172. xx.xx.xxx: xxxx
>用户代理:自定义
>接受:* / *
内容长度>:172182
>内容类型:多部分/格式;边界= - - - - - - - - - - - - - - - - - - - - - - - - 116599 a4ff5c77c1
>预计:100 -继续
>
*马克包不支持多用途金宝app
< HTTP / 1.1 100继续
}(65536字节数据)
*我们完全上传和细
*马克包不支持多用途金宝app
< HTTP / 1.1 200 OK
现在我想达到同样的Matlab代码(本地),但服务器响应代码400(错误请求)无论如何我试一试。
Matlab代码:
f =“C: \ myfile.xml”;
d = dir (f);
进口matlab.net.http.RequestMessage
进口matlab.net.http.io.FileProvider
进口matlab.net.http.io.MultipartProvider
进口matlab.net.http.io.MultipartFormProvider
HeaderField = matlab.net.http.HeaderField (
“内容类型”,“多部分/格式”,%不确定需要
内容长度,d.bytes,……%不确定需要
“传输编码”,“gzip”,%不确定需要
“接受”,‘* / *,%不确定需要
“用户代理”,“客户”
);
fps = FileProvider (local_name);
fps。文件大小= d.bytes;%不确定需要
议员= MultipartProvider (fps);
mpfp = MultipartFormProvider (“subrecipeFile”mp);
%准备请求
要求= RequestMessage (“职位”、HeaderField mpfp);
%一些额外的HTTP调试选项
o = matlab.net.http.HTTPOptions;
o。ConnectTimeout = 5000;
o。SavePayload = true;
%发送请求
(反应、completed_req、历史)=点播。发送(url, o);
completed_req.show ();
由于completed_req.show ():
帖子/ someaddress吗?a = b HTTP / 1.1
主持人:172. xx.xx.xxx: xxxx
内容类型:多部分/格式;边界=“- - - - - - - - - - - - - - - - - -.WH 'NOYBrQ EiGwD9DCA”
内容大小:171965
连接:关闭
传输编码:分块
接受编码:gzip
日期:5月结婚,052021年10:26:11格林尼治时间
接受:* / *
用户代理:自定义
- - - - - - - - - - - - - - - - - - -.WH EiGwD9DCA 'NOYBrQ)
内容类型:multipart /混合;边界= - - - - - - - - - - - - - - - - - -ktgFtwFiK0s6fDaqankt
附加:格式;name = subrecipeFile
< < 172151字节多部分/混合数据> >
- - - - - - - - - - - - - - - - - - -.WH 'NOYBrQ) EiGwD9DCA—
我有一个非常强烈的怀疑 传输编码:分块 是我的痛苦之源;我认为HTTP服务器无法处理这些编码正确。然而,对于我的生活,我不能阻止Matlab使用这个编码。
有专家在这里谁能帮忙?谢谢!
编辑:文档和源代码我能够隔离send()方法将传输编码设置为“分块”如果内容提供商不提供一个长度。你可以手动添加长度(请求的页眉设置content - length),但这是非常乏味的长度你需要文件大小+负载中的所有行(一些标题和边界)。
在花了一两个小时算出正确的内容长度值,我能够发送请求没有传输编码:分块!我的庆祝活动,我们短暂的服务器仍然以400:错误请求的响应,但也许一些未来的读者将帮助。

Antworten (1)

ABrink
ABrink 我麦2021
Bearbeitet:ABrink 我麦2021
我设法解决问题使用本机Matlab代码。关键的信息 在这里
%手动编译的多部分/格式要求
边界=“* * * * * *”;
EOL = sprintf (' % s % s '10],[13日);
头= matlab.net.http.field.ContentTypeField (
matlab.net.http.MediaType (“多部分/格式”,“边界”边界));
data = (
“——”、边界、生物
“附加项:格式;name = "文件";文件名=“dummy.xml”,生物
“的content - type: text / xml”,生物
生物
fileread (“C: \ myfile.xml”),生物
“——”边界,“——”,生物
];
%编译和发送HTTP POST请求
uri = matlab.net.URI (url);
要求= matlab.net.http.RequestMessage (“职位”、头、数据);
resp = req.send (uri);

Kategorien

找到更多的在使用HTTP与MATLAB帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的