2

这是我的网络请求代码块,
向下滚动到它的底部以捕获异常

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", genHMAC ());
     byte[] dataStream = Encoding.UTF8.GetBytes("command=returnBalances&nonce=" + nonce);
     webRequest.ContentLength = dataStream.Length;
     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 (Exception ex) 
{
     OutputText.text = ex.ToString ();
}

这给了我一个“错误(403)禁止”和异常堆栈跟踪,但我正在尝试获取 403 响应正文:

我无法让 Unity C# 接受以下代码:提到这里

catch(WebException ex)
{
     var response = (HttpWebResponse)ex.Response;
}

我需要什么才能使这种方法起作用?我需要响应体

4

1 回答 1

1

hmac.ToString()不会生成有效符号。要为 Poloniex 生成有效符号,您必须使用HMACSHA512.ComputeHash方法并将其dataStream作为参数传递。从此方法返回的字节必须转换为十六进制字符串。

这应该生成有效的符号:

var hmac = new HMACSHA512(APISecret_Bytes);
var signBytes = hmac.ComputeHash(dataStream);
var sign = String.Join("", signBytes.Select(b => b.ToString("X2")));

关于WebException,它是在System.Net命名空间中声明的,所以请确保你有using System.Net;. 根据目标框架,WebException 应该位于System.Net.Requests.dllSystem.dllnetstandard.dll. 不幸的是,我对 Unity 没有任何经验,但如果我猜测它以普通为目标.NET Framework是正确的,那么在其中声明了 WebException,System.dll并且您的项目应该已经引用了它,并且不需要额外的程序集引用。

于 2018-04-14T06:01:06.993 回答