首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MTGOX api的内部服务器

使用MTGOX api的内部服务器
EN

Stack Overflow用户
提问于 2013-04-23 23:42:08
回答 1查看 733关注 0票数 1

我在调用MTGox HTTP api v2时遇到问题。我写了一个sendrequest函数来处理我的所有请求。它对MONEY/INFO或MONEY/ORDERS非常有效,但当我尝试MONEY/ORDER/QUOTE或MONEY/ORDER/ADD方法时,我得到了一个500内部服务器错误。

似乎当post_data包含除nonce之外的任何内容时,它就会出错。我要怎么做才能解决这个问题呢?

sendrequest函数:

代码语言:javascript
复制
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;
    }
EN

回答 1

Stack Overflow用户

发布于 2013-04-24 10:29:01

对于任何使用参数的请求,请确保签名中的nonce位于签名的最后,例如,对于货币美元的货币/钱包/历史记录,您的签名应为:

代码语言:javascript
复制
money/wallet/history\0currency=USD&nonce=xxxxxxxxxx

( \0是一个空字符,如果你想知道的话)

此外,MtGox的API现在似乎在不断变化-例如,对于上面的钱包历史记录,我们过去常常调用:

代码语言:javascript
复制
BTCUSD/money/wallet/history

作为API端点,但这似乎不再起作用。现在我们调用:

代码语言:javascript
复制
money/wallet/history

因此,如果以前为您工作的呼叫现在失败了,也可以看看这一点。但我可以肯定地告诉你,将你的nonce作为QS中签名的最后一个参数是至关重要的,否则你的API调用将不再有效。

我还建议在MtGox中重新创建一个新的API key,-we必须这样做,以便我们的代码也能正常工作。我有一种预感,这是因为MtGox最近的API更改已经使旧的密钥失效(可能会让交易机器人保持在海湾,而他们正在考虑如何在不让机器人杀死他们的API的情况下处理它们)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16173642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档