Poloniex C#交易API webRequest再次出现(403)禁止

编程入门 行业动态 更新时间:2024-10-10 01:23:34
本文介绍了Poloniex C#交易API webRequest再次出现(403)禁止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经将代码简化为测试访问的基本要求,但是正在从服务器接收到良好的旧错误(403),为确保使用正确的API密钥/秘密对,我已经进行了两次验证.我的代码(通过Unity 3D通过C#)如下:

I have my code down to the essentials for testing access, but am receiving the good old error(403) from the server, I have verified for double-sure I am using the correct API Key/Secret pair. My Code (C# via Unity 3D) is as follows:

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Security.Cryptography; using System.IO; using System.Text; using System.Net; public class PolonScript : MonoBehaviour { public TextMesh OutputText; const string _apiKey = "---apiKey---"; const string _apiSecret = "---apiSecret---"; void Start() { string nonce = DateTime.Now.ToString ("HHmmss"); const string WEBSERVICE_URL = "poloniex/tradingApi"; try { var webRequest = System.Net.WebRequest.Create (WEBSERVICE_URL); if (webRequest != null) { webRequest.Method = "POST"; //webRequest.Timeout = 12000; webRequest.ContentType = "application/x-www-form-urlencoded"; byte[] dataStream = Encoding.UTF8.GetBytes("command=returnBalances&nonce=" + nonce); webRequest.Headers.Add("Key", _apiKey); webRequest.Headers.Add("Sign", genHMAC (dataStream)); Stream newStream = webRequest.GetRequestStream(); newStream.Write(dataStream, 0, dataStream.Length); newStream.Close(); using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream()) { using (System.IO.StreamReader sr = new System.IO.StreamReader(s)) { var jsonResponse = sr.ReadToEnd(); OutputText.text = jsonResponse.ToString(); } } } } catch (WebException ex) { OutputText.text = ex.ToString(); } } //end-of-start() private string genHMAC(byte[] dataStreamInput) { byte [] APISecret_Bytes = System.Text.Encoding.UTF8.GetBytes(_apiSecret); HMACSHA512 hmac = new HMACSHA512(APISecret_Bytes); var signBytes = hmac.ComputeHash(dataStreamInput); string HexDecString = string.Empty; for (int i = 0; i < signBytes.Length; i++) { HexDecString += signBytes[i].ToString("X2"); } return HexDecString; } }

那我为什么要使用准确的凭据收到(403)禁止?

So why am I receiving the (403) Forbidden using accurate credentials?

我试图这样做以查看原因:

I tried this to see the reason:

catch (WebException ex) { OutputText.text = ex.Response.Headers.ToString (); }

并收到以下信息

//Date: Sat, 14 Apr 2018 15:34:56 GMT //Content-Type: application/json //Transfer-Encoding: chunked //Connection: keep-alive //Set-Cookie: __cfduid=dd1b32592915674669120afbf8181141b1523720096; expires=Sun, 14-Apr-19 15:34:56 GMT; path=/; domain=.poloniex; HttpOnly //Cache-Control: private //Expect-CT: max-age=604800, report-uri="report-//uri.cloudflare/cdn-cgi/beacon/expect-ct" //Server: cloudflare //CF-RAY: 40b73d4b8c98552e-ORD

推荐答案

我希望这是因为您的Sign标头无效.

I expect that is because your Sign header is not valid.

您可以使用伪造的nonce和伪造的secret仔细检查符号功能是否正常,并确认sign正确

You can doublecheck if your sign function is ok using those fake nonce and fake secret, and verify that the sign is good

  • 发布数据:nonce=123456&command=returnBalances

现时:123456

秘密:123456

sign将是:b56174398987d15deee73885ca178ba82c414c7f27e763a9aa3cfc41c5b1373980ed83638bbf8c66dc62c20cbf35e770ad264af8571d22bc7c96fae9740dac0

如果符号不同,请共享您的genHMAC代码功能.

If the sign is different please share your genHMAC code function.

您可以尝试使用此版本来生成sign标头:

You may try this version to generate the sign header:

private readonly string _apiKey = "123456"; private readonly string _apiSecret = "123456"; private long nonce = DateTime.Now.Ticks; private string CreateSignature() { //string msg = string.Format("{0}{1}{2}", _apiKey); return ByteArrayToString(SignHMACSHA512(_apiSecret, StringToByteArray(_apiKey))).ToUpper(); } private static byte[] SignHMACSHA512(String key, byte[] data) { HMACSHA512 hashMaker = new HMACSHA512(Encoding.ASCII.GetBytes(key)); return hashMaker.ComputeHash(data); } private static byte[] StringToByteArray(string str) { return System.Text.Encoding.ASCII.GetBytes(str); } private static string ByteArrayToString(byte[] hash) //rimuove - e converte in bite { return BitConverter.ToString(hash).Replace("-", "").ToLower(); }

然后:

const string WEBSERVICE_URL = "poloniex/tradingApi"; try { var webRequest = System.Net.WebRequest.Create(WEBSERVICE_URL); if (webRequest != null) { webRequest.Method = "POST"; webRequest.Timeout = 12000; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.Headers.Add("Key", _apiKey); webRequest.Headers.Add("Sign", CreateSignature()); // keysecret var postData = "&nonce=&command=returnBalances"; var data = Encoding.ASCII.GetBytes(postData); using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream()) { using (System.IO.StreamReader sr = new System.IO.StreamReader(s)) { var jsonResponse = sr.ReadToEnd(); Console.WriteLine(String.Format("Response: {0}", jsonResponse)); } } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); }

来源: bitcointalk/index.php?topic=1590683.0

更多推荐

Poloniex C#交易API webRequest再次出现(403)禁止

本文发布于:2023-10-27 23:52:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1534893.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:API   Poloniex   webRequest

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!