当使用HTTP PUT方法并且内容类型为application /
x-www-form-urlencoded时,THTTPClient不支持发送Body。当然了,对于HTTP来说,用Post也可以跳开这个Bug。想不想改代码,按你的个人意愿了。
下面是修正代码:
function THTTPClient.Put(const AURL: string; const ASource:
TStrings;
const AResponseContent: TStream = nil; const
AEncoding: TEncoding = nil;
const AHeaders: TNetHeaders = nil):
IHTTPResponse;
var
LSourceStream: TStringStream;
LParams: string;
LEncoding: TEncoding;
I: Integer;
Pos: Integer;
LRequest: IHTTPRequest;
begin
LParams := '';
for I := 0 to ASource.Count - 1 do
begin
Pos :=
ASource[I].IndexOf('=');
if Pos >
0 then
LParams := LParams +
TNetEncoding.URL.EncodeForm(ASource[I].Substring(0, Pos)) + '='
+
TNetEncoding.URL.EncodeForm(ASource[I].Substring(Pos + 1)) +
'&';
end;
if (LParams <> '') and
(LParams[High(LParams)] = '&') then
LParams :=
LParams.Substring(0, LParams.Length - 1); // Remove last
&
if AEncoding = nil then
LEncoding :=
TEncoding.UTF8
else
LEncoding :=
AEncoding;
LSourceStream := TStringStream.Create(LParams,
LEncoding, False);
try
LRequest :=
FHTTPClient.GetRequest(sHTTPMethodPut, AURL);
LRequest.SourceStream := LSourceStream;
LRequest.SourceStream.Position := 0;
LRequest.AddHeader(sContentType,
'application/x-www-form-urlencoded; charset=' +
GetEncodingMIMEName(LEncoding));
Result :=
FHTTPClient.Execute(LRequest, AResponseContent, AHeaders);
finally
LSourceStream.Free;
end;
end;
加载中,请稍候......