对接快麦接口时,使用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--