[英]Internal server with MTGOX api
我在調用MTGox HTTP api v2時遇到問題。 我編寫了一個sendrequest函數來處理我的所有請求。 它非常適合MONEY / INFO或MONEY / ORDERS,但是當我嘗試使用MONEY / ORDER / QUOTE或MONEY / ORDER / ADD方法時,我收到500個內部服務器錯誤。
似乎當post_data除了隨機數之外還包含其他任何內容時,都會出錯。 我該怎么做才能解決這個問題?
sendrequest函數:
private string sendRequest(string action, NameValueCollection query)
{
NameValueCollection nvc = new NameValueCollection();
nvc.Add("nonce", DateTime.Now.Ticks.ToString());
nvc.Add(query);
String post_data = "";
for (int i = 0; i < nvc.Count; i++)
{
post_data += "&";
post_data += nvc.Keys[i];
post_data += "=";
post_data += nvc[i];
}
post_data = post_data.Substring(1);
action = "BTCEUR/money/" + action;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sBasePath + action);
action += "\0"+post_data;
req.Method = "POST";
HMACSHA512 hmac = new HMACSHA512(GetBytes(action));
hmac.Key = Convert.FromBase64String(secret);
String sign = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(action)), Base64FormattingOptions.None);
req.Headers.Add("Rest-Key", apikey);
req.Headers.Add("Rest-Sign", sign);
req.UserAgent = "Mozilla/4.0 (compatible; MtGoxTradeCLI)";
req.ContentType = "application/x-www-form-urlencoded";
StreamWriter reqStream = new StreamWriter(req.GetRequestStream());
reqStream.Write(post_data);
reqStream.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader respStream = new StreamReader(resp.GetResponseStream());
String response = respStream.ReadToEnd();
respStream.Close();
return response;
}
對於任何需要參數的請求,請確保簽名中的隨機數在簽名中排在最后,例如,貨幣/錢包/歷史貨幣為USD時,您的簽名應為:
money/wallet/history\0currency=USD&nonce=xxxxxxxxxx
(\\ 0為空字符,以防萬一您想知道)
此外,MtGox的API現在似乎還在不斷變化-例如,對於上述錢包歷史記錄,我們曾經調用過:
BTCUSD/money/wallet/history
作為API端點,但這似乎不再起作用。 現在我們調用:
money/wallet/history
因此,如果曾經為您服務的電話現在失敗了,也可以看看。 但是我可以肯定地說,將隨機數作為簽名中QS的最后一個參數很關鍵,否則API調用將不再起作用。
我還建議在MtGox中重新創建一個新的API密鑰-為了使我們的代碼也能正常工作,我們必須這樣做。 我有一種直覺,這是因為MtGox最近對API所做的更改已使舊密鑰無效(可能使交易機器人陷入困境,而他們卻想出了如何在不使機器人殺死其API的情況下處理它們)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.