I'm trying to develop a integration with Poloniex API (https://docs.poloniex.com/#introduction), buy I'm facing some difficulties on doing private HTTP connections.
Here's my code, can anyone help me? Server is returning the message {"error":"Invalid API key\/secret pair."} Thanks in advance.
You need a post request for the private endpoint
You need a post request for the private endpoint
Yes I just realized that and changed to "POST", but I still get the same error. Any ideias?
Hmm , are you still sending the commands like "?command=" ,instead of as parameters ?
double poloniexGetBalances() { string nonce0 = (string)(long)TimeLocal(); StringAdd(nonce0,"00000"); long nonce = (long)nonce0; char result[],data[]; string headersResp, url_1, method; string headersCons=""; method="POST"; url_1="tradingApi"; string url_2; url_2="command="+"returnBalances"; url_2=url_2+"&nonce="+(string)nonce; SHA512 hash512; string signature=hash512.hmac(url_2,mysecret); headersCons="{ \"Key\": "+mykey+", \"Sign\": "+signature+" }\r\n"; StringToCharArray(url_2,data); string url="https://poloniex.com/"+url_1; int res=WebRequest(method,url,headersCons,10000,data,result,headersResp); if(res==-1) { Print("Erro na conexão com o API da Poloniex."); return(0); } if(res==200) { string in=CharArrayToString(result); CJAVal js(NULL, jtUNDEF); js.Deserialize(in); string out=""; } return(0); }
try this :
double pxGetBalance() { string itype="application/x-www-form-urlencoded"; string iuser_agent="Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.62"; string nonce0=(string)(long)TimeLocal(); StringAdd(nonce0,"00000"); string params[2]; params[0]="command=returnBalances"; params[1]="nonce="+nonce0; string url2=params[0]+"\r\n"+params[1]; string ty="Content-Type: "+itype+"\r\n"+; SHA512 hash512; string signature=hash512.hmac(url2,mysecret); ty+="Key:"+mykey+"\r\nSign:"+signature+"\r\n"; string ua="user-agent:"+iuser_agent; string response=WR_REQUEST(wr_post,"https://poloniex.com/tradingApi",params,ty,ua,NULL,"https://poloniex.com",5000); Alert("Response : "+response); return(0); } //REQUEST CODE enum wr_type { wr_get=0,//GET wr_post=1//POST }; string WR_REQUEST(wr_type request_type,string url,string ¶ms[],string type,string user_agent,string cookie,string referer,uint timeout) { string response="not sent"; string headers=""; /* for headers , in type string include header descriptor (e.g. Content-Type:) in user agent string include user agent descriptor (e.g. user-agent:) */ if(type!=NULL) headers=type; if(user_agent!=NULL) headers=headers+"\r\n"+user_agent; char post[],result[]; int res; string target_url=url; string specs=""; //fill specs if they exist int params_total=ArraySize(params); bool noparams=false; if(params_total==1&¶ms[0]=="") noparams=true; if(noparams==false) { for(int fp=0;fp<params_total;fp++) { specs=specs+params[fp]; if(fp<params_total-1) specs=specs+"&"; } } if(request_type==wr_get&&noparams==false) target_url=target_url+"?"+specs; char data[]; int data_size=0; int slen=StringLen(specs); if(request_type==wr_post) data_size=StringToCharArray(specs,data,0,slen,CP_UTF8); ResetLastError(); string req_string="GET"; if(request_type==wr_post) req_string="POST"; res=WebRequest(req_string,target_url,cookie,referer,timeout,data,data_size,result,headers); if(res==-1) { Print("Error in WebRequest. Error code =",GetLastError()); MessageBox("Add the address '"+url+"' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); } else { //PrintFormat("The file has been successfully loaded, File size =%d bytes.",ArraySize(result)); int tit=ArraySize(result)-1; string html=""; for(int xx=0;xx<=tit;xx++) { html=html+CharToStr(result[xx]); } response=html; } return(response); ArrayFree(result); } //REQUEST CODE ENDS HERE
try this :
I removed an extra "+" from your code line - string ty="Content-Type: "+itype+"\r\n"+; And changed function CharToStr to CharToString.
I'm still getting the same error - invalid key/secret... I tried to delete my API key twice and generate new key/secret but I'm still getting the same error :(
Any ideias?
I removed an extra "+" from your code line - string ty="Content-Type: "+itype+"\r\n"+; And changed function CharToStr to CharToString.
I'm still getting the same error - invalid key/secret... I tried to delete my API key twice and generate new key/secret but I'm still getting the same error :(
Any ideias?
replace "+"\r\n"+" in url2 calculation with "+"&"+"
replace "+"\r\n"+" in url2 calculation with "+"&"+"
Still getting the same error
double pxGetBalance() { string itype="application/x-www-form-urlencoded"; string iuser_agent="Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.62"; string nonce0=(string)(long)TimeLocal(); StringAdd(nonce0,"00000"); string params[2]; params[0]="command=returnBalances"; params[1]="nonce="+nonce0; string url2=params[0]+"&"+params[1]; string ty="Content-Type: "+itype+"\r\n"; SHA512 hash512; string signature=hash512.hmac(url2,mysecret); ty+="Key:"+mykey+"\r\nSign:"+signature+"\r\n"; string ua="user-agent:"+iuser_agent; string response=WR_REQUEST(wr_post,"https://poloniex.com/tradingApi",params,ty,ua,NULL,"https://poloniex.com",5000); Alert("Response : "+response); return(0); } //REQUEST CODE enum wr_type { wr_get=0,//GET wr_post=1//POST }; string WR_REQUEST(wr_type request_type,string url,string ¶ms[],string type,string user_agent,string cookie,string referer,uint timeout) { string response="not sent"; string headers=""; /* for headers , in type string include header descriptor (e.g. Content-Type:) in user agent string include user agent descriptor (e.g. user-agent:) */ if(type!=NULL) headers=type; if(user_agent!=NULL) headers=headers+"\r\n"+user_agent; char post[],result[]; int res; string target_url=url; string specs=""; //fill specs if they exist int params_total=ArraySize(params); bool noparams=false; if(params_total==1&¶ms[0]=="") noparams=true; if(noparams==false) { for(int fp=0;fp<params_total;fp++) { specs=specs+params[fp]; if(fp<params_total-1) specs=specs+"&"; } } if(request_type==wr_get&&noparams==false) target_url=target_url+"?"+specs; char data[]; int data_size=0; int slen=StringLen(specs); if(request_type==wr_post) data_size=StringToCharArray(specs,data,0,slen,CP_UTF8); ResetLastError(); string req_string="GET"; if(request_type==wr_post) req_string="POST"; res=WebRequest(req_string,target_url,cookie,referer,timeout,data,data_size,result,headers); if(res==-1) { Print("Error in WebRequest. Error code =",GetLastError()); MessageBox("Add the address '"+url+"' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); } else { //PrintFormat("The file has been successfully loaded, File size =%d bytes.",ArraySize(result)); int tit=ArraySize(result)-1; string html=""; for(int xx=0;xx<=tit;xx++) { html=html+CharToString(result[xx]); } response=html; } return(response); ArrayFree(result); } //REQUEST CODE ENDS HERE
SOLVED!!!!
Changed the line:
res=WebRequest(req_string,target_url,cookie,referer,timeout,data,data_size,result,headers);
for
res=WebRequest(req_string,target_url,headers,timeout,data,result,resheader);
Also removed an extra "\r\n" on header string.
Thank you very much for you time Lorentzos!
Great . No problem
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I'm trying to develop a integration with Poloniex API (https://docs.poloniex.com/#introduction), buy I'm facing some difficulties on doing private HTTP connections.
Here's my code, can anyone help me? Server is returning the message {"error":"Invalid API key\/secret pair."} Thanks in advance.