請教個問題:
除錯時發現我每執行一次IDHTTP.post 方法,就會有一個叫TidSSLCipher沒有釋放記憶體,這該如何處理呀?
uj5u.com熱心網友回復:
給出你使用的代碼。正常情況下沒這樣的情況發生。uj5u.com熱心網友回復:
代碼如下,就是呼叫了有贊商城的介面var
resultStr: string;
sToken: string;
begin
sToken:= frmdm.GetAccessTokenByYun;
if Trim(sToken) = '' then Exit;
HttpGet.Request.ContentType:= 'application/x-www-form-urlencoded' ;
Liststr.Clear;
ListStr.Values['tid'] := tid;
resultStr := DecodeUtf8Str(HttpGet.Post('https://open.youzanyun.com/api/youzan.trade.get/4.0.0'+ sToken, Liststr));
Result:= resultStr;
end;
uj5u.com熱心網友回復:
httpGet創建如下:HttpGet:= TIdHTTP.Create(nil);
HttpGet.HTTPOptions:= [];
HttpGet.AllowCookies:= False;
IdSSLIOHandlerSocket1:= TIdSSLIOHandlerSocket.Create(nil);
IdSSLIOHandlerSocket1.SSLOptions.Method:= sslvSSLv23;
HttpGet.IOHandler:= IdSSLIOHandlerSocket1;
釋放如下:
HttpGet.IOHandler:= nil;
FreeAndNil(IdSSLIOHandlerSocket1);
FreeAndNil(HttpGet);
inherited;
uj5u.com熱心網友回復:
你的代碼看上去是沒什么問題的。測驗了一下,沒問題,可能是我們版本不同,我使用的是TIdSSLIOHandlerSocketOpenSSL,沒有TIdSSLIOHandlerSocket。
Function HttpPost(MsgSend: String; vUrl: String): String;
var
vHttp: TIdHTTP;
vIdSSL: TIdSSLIOHandlerSocketOpenSSL;
mStream: TStringStream;
FUrl: string;
begin
Result := '';
FUrl:= vUrl;
vHttp := TIdHTTP.Create(nil);
try
vHttp.Request.ContentType := 'application/x-www-form-urlencoded';
mStream := TStringStream.Create(MsgSend,CP_UTF8);
//使用https安全通訊方式
vIdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
vHttp.IOHandler := vIdSSL;
//Post 資料
Result := vHttp.Post(FUrl,mStream);
finally
vHttp.IOHandler := nil;
//vHttp.Disconnect;
//vIdSSL.Destroy;
FreeAndNil(vIdSSL);
FreeAndNil(vHttp);
FreeAndNil(mStream);
end;
end;
procedure TForm8.Button1Click(Sender: TObject);
begin
HttpPost('test','https://open.youzanyun.com/api/youzan.trade.get/4.0.0');
end;
你可以試試換成TNetHTTPClient去POST。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165207.html
標籤:VCL組件開發及應用
上一篇:c語言
下一篇:請教一個關于生日存盤的問題
