yrkrus
Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Доброго дня, пните в нужном направлении,а то при запросе получаю 400 Bad Request на параметре ServerOtvet Код: function GetUserTrade(InValytnayaPara,InNameBirza:string):string; var ApiKey,ApiSecret,Signature:string; nonce:string; // текущая дата и время в формате Unix http:TIdHTTP; ssl:TIdSSLIOHandlerSocketOpenSSL; params:TStringStream; ServerOtvet:WideString; ValPar:string; SocksInfo:TIdSocksInfo; Proxy:Boolean; test:string; begin ApiKey:=SettingsLoadString('core','ApiKey_'+InNameBirza,''); ApiSecret:=SettingsLoadString('core','ApiSecret_'+InNameBirza,''); SITE_USER_TRADES_BINANCE:='https://api.binance.com/api/v3/myTrades'; ValPar:=InValytnayaPara; ValPar:=StringReplace(ValPar,'/','',[rfReplaceAll]); // высчитываем текущее время биржи repeat nonce:=GetResponceToServerBINANCE(SITE_SERVERTIME_BINANCE); if APIError then begin Logging('ОШИБКА API! Отправка повторного запроса. Ответ сервера: '+CodOshibki+' Запрос: '+URLOshibki); Sleep(SLEEPTIME*10); end; until APIError=False; // разбираем System.Delete(nonce,1,AnsiPos(':',nonce)); System.Delete(nonce,Length(nonce),Length(nonce)); params:=TStringStream.Create; params.WriteString('timestamp='+nonce); Signature:=SHA256DigestToHexA(CalcHMAC_SHA256(ApiSecret,params.DataString)); http:=TIdHTTP.Create(nil); // проверка работаем через прокси if GetBotJobInProxy then begin if (TypeProxy[0]=SettingsLoadString('proxy','TypeProxy','везде')) or (TypeProxy[1]=SettingsLoadString('proxy','TypeProxy','везде')) then Proxy:=True else Proxy:=False; end else Proxy:=False; if Proxy then begin SocksInfo:=TIdSocksInfo.Create(nil); with SocksInfo do begin Host:=SettingsLoadString('proxy','Server',''); Port:=StrToInt(SettingsLoadString('proxy','Port','')); if SettingsLoadString('proxy','Socks','Socks4')='Socks4' then Version:=svSocks4 else Version:=svSocks5; // авторизация if SettingsLoadString('proxy','Auth','false')='true' then begin Authentication:=saUsernamePassword; UserName:=SettingsLoadString('proxy','AuthLogin',''); Password:=SettingsLoadString('proxy','AuthPwd',''); end; end; ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(SocksInfo); ssl.TransparentProxy:=SocksInfo; ssl.SSLOptions.Method:=sslvTLSv1_2; ssl.SSLOptions.SSLVersions:=[sslvTLSv1_2]; end else begin ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(http); ssl.SSLOptions.Method:=sslvTLSv1_2; ssl.SSLOptions.SSLVersions:=[sslvTLSv1_2]; end; with http do begin IOHandler:=ssl; Request.CustomHeaders.Add('X-MBX-APIKEY:'+ApiKey); Request.CustomHeaders.Add(CustomHeaders0); Request.CustomHeaders.Add(CustomHeaders1); Request.CustomHeaders.Add(CustomHeaders2); Request.CustomHeaders.Add(CustomHeaders3); Request.CustomHeaders.Add(CustomHeaders4); try ServerOtvet:=Get(SITE_USER_TRADES_BINANCE+'?symbol='+ValPar+'&limit=50'+'×tamp='+nonce+'&signature='+Signature); APIError:=False; except APIError:=True; CodOshibki:=Response.ResponseText; URLOshibki:=SITE_USER_TRADES_BINANCE+'?timestamp='+nonce+'&symbol='+ValPar+'&limit=50'+'&signature='+Signature; end; end; end; if ssl<>nil then begin ssl.Free; ssl:=nil; end; if params<>nil then begin params.Free; params:=nil; end; if SocksInfo<>nil then begin SocksInfo.Free; SocksInfo:=nil; end; if http<>nil then begin http.Free; http:=nil; end; end; | |