Delphi7 TIdMultiPartFormDataStream 的坑

对接快麦接口时,使用TIdMultiPartFormDataStream 多表单提交数据。

因为TIdMultiPartFormDataStream  每加一个字段时,总会在最后多加一个回车。这也就导致了最后总是有一个回车,接口在读取最后一个值时会多一个回车字符。导致签名过不了。

要处理一下,这里不改源码。有可能其他厂商是有处理这个问题的,但是对接快麦没有。

var
 FormData: TIdMultiPartFormDataStream;
 FormDataStr: TStringStream;
 FormDataStr2:string;
 DelStr:string;
begin
 FormData := TIdMultiPartFormDataStream.Create;
 FormData.AddFormField('TEST','123');
 FormData.AddFormField('TEST2','234');
 FormDataStr := TStringStream.Create('');
 FormData.Position := 0;
 FormDataStr.CopyFrom(FormData,FormData.Size);
 //要截取掉的字符
 DelStr := #13#10#13#10+'--'+FormData.Boundary+'--';
 FormDataStr2 :=  copy(FormDataStr.DataString,1,Length(FormDataStr.DataString)-Length(DelStr))+'--'+FormData.Boundary+'--';
 mmo1.Lines.Add(FormDataStr2);

前后对比:

没有处理前的:最后一个test2 值是234 但是多了一行回车
----------052922172950309
Content-Disposition: form-data; name="TEST"

123
----------052922172950309
Content-Disposition: form-data; name="TEST2"

234

----------052922172950309--
处理后的:
----------052922172950309
Content-Disposition: form-data; name="TEST"

123
----------052922172950309
Content-Disposition: form-data; name="TEST2"

234
----------052922172950309--

 

posted @ 2022-05-29 17:31  Tag  阅读(568)  评论(0编辑  收藏  举报