Poloniex C# Trading API webRequest 回来了 (403) Forbidden

     2023-02-19     207

关键词:

【中文标题】Poloniex C# Trading API webRequest 回来了 (403) Forbidden【英文标题】:Poloniex C# Trading API webRequest comes back (403) Forbidden 【发布时间】:2018-09-24 18:28:07 【问题描述】:

我的代码已经达到了测试访问的基本要求,但我从服务器收到了旧的错误 (403),我已经确认我使用了正确的 API 密钥/秘密对。我的代码(通过 Unity 3D 实现的 C#)如下:

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 = "https://poloniex.com/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) Forbidden 使用准确的凭据?

我试过这个看看原因:

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.com; HttpOnly
//Cache-Control: private
//Expect-CT: max-age=604800, report-uri="https://report-//uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
//Server: cloudflare
//CF-RAY: 40b73d4b8c98552e-ORD

【问题讨论】:

【参考方案1】:

我预计这是因为您的 Sign 标头无效。


您可以使用假的nonce 和假的secret 仔细检查您的签名功能是否正常,并验证sign 是否正确

发布数据:nonce=123456&amp;command=returnBalances

随机数:123456

秘密:123456

sign 将是:b56174398987d15deee73885ca178ba82c414c7f27e763a9aa3cfc41c5b1373980ed83638bbf8c66dc62c20cbf35e770ad264af8571d22bc7c96fae9740dac0

如果标志不同,请分享您的genHMAC 代码功能。


你可以试试这个版本来生成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("012", _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 = "https://poloniex.com/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());
    

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

【讨论】:

我得到 F21E6ECC2EE587A4DF217EEDFA38F87CC72.... 等等。我的 genHMAC 是: private string genHMAC(byte[] dataStreamInput) byte [] APISecret_Bytes = System.Text.Encoding.UTF8.GetBytes(_apiSecret); HMACSHA512 hmac = 新 HMACSHA512(APISecret_Bytes); var signBytes = hmac.ComputeHash(dataStreamInput);字符串 HexDecString = string.Empty; for (int i = 0; i 我更新答案以添加 C# CreateSignature() 函数和发布请求示例

Poloniex 新的 Websocket API

】Poloniex新的WebsocketAPI【英文标题】:PoloniexNewWebsocketAPI【发布时间】:2018-08-2907:33:02【问题描述】:我正在尝试使用newwebsocketAPIwithPoloniex。Wamp现在已被弃用,关于如何对实时公共数据(如音量等)进行简单调用的信息非常少。... 查看详情

Poloniex 通过 Autobahn 推送 WAMP API,断开与对等 tcp 的连接

】Poloniex通过Autobahn推送WAMPAPI,断开与对等tcp的连接【英文标题】:PoloniexPushWAMPAPIthroughAutobahndroppingconnectiontopeertcp【发布时间】:2017-11-2809:40:21【问题描述】:我尝试使用python连接到poloniex中的PushAPI,并按照此处的答案说明进行... 查看详情

poloniex403禁止使用python3.5(代码片段)

我正在尝试创建与poloniex的基本身份验证连接,并且我不断从其API返回403forbidden错误。timeimporttimeimporturllib.requestimporturllib.parseimporthashlibimporthmacAPIkey=b'provert-kee'secret=b'ceecret'url='https://poloniex.com/tradingA 查看详情

使用java访问poloniexhttpapi

我尝试连接到poloniex.comAPIhttps://poloniex.com/support/api/,其中说:(所有对交易API的调用都通过HTTPPOST发送到https://poloniex.com/tradingApi,并且必须包含以下标题:密钥-您的API密钥。Sign-根据HMAC-SHA512方法,由密钥的“秘密”签名的查询... 查看详情

如何在 nuxt.js 中安装 trading-vue-js 插件?

】如何在nuxt.js中安装trading-vue-js插件?【英文标题】:Howtoinstalltrading-vue-jspluginsinnuxt.js?【发布时间】:2020-11-2901:39:27【问题描述】:我尝试使用nuxt.js和trading-vue-js插件(如Tradingview.com)制作网站。所以我在我的项目中安装了tradi... 查看详情

正则表达式 C# 条件提取 [重复]

】正则表达式C#条件提取[重复]【英文标题】:RegexC#conditionalextract[duplicate]【发布时间】:2020-01-2413:14:59【问题描述】:您好,我有一个这样的xml文本<w:p>abc</w:p><w:p>def</w:p><w:tr#A1b2c3><w:p>123</w:p></w:... 查看详情

c#常用api函数大全

常用WindowsAPI常用WindowsAPIAPI之网络函数API之消息函数API之文件处理函数API之打印函数API之文本和字体函数API之菜单函数API之位图图标和光栅运算函数API之绘图函数API之设备场景函数API之硬件与系统函数API之进程和线程函数API之控... 查看详情

在 C# 中使用正则表达式解析电子邮件

】在C#中使用正则表达式解析电子邮件【英文标题】:parseemailwithregexinc#【发布时间】:2011-08-2817:00:49【问题描述】:我需要在c#中使用正则表达式解析电子邮件文件,即解析包含多封电子邮件的电子邮件文件并将其解析为其组成... 查看详情

trading_single

HH1:=IF(HIGH<REF(HIGH,2)&&REF(HIGH,1)<REF(HIGH,2),REF(HIGH,2),0);LL1:=IF(LOW>REF(LOW,2)&&REF(LOW,1)>REF(LOW,2),REF(LOW,2),0);HH2:=VALUEWHEN(HH1>0,HH1);LL2:=VALUEWHEN(LL1 查看详情

区别 b/w 在 C# 中隐式实现成员和显式实现成员 [重复]

】区别b/w在C#中隐式实现成员和显式实现成员[重复]【英文标题】:differenceb/wimplicitlyimplementingamemberandexplicitlyimplementingamemberinC#[duplicate]【发布时间】:2012-11-0405:06:16【问题描述】:可能重复:C#:Interfaces-ImplicitandExplicitimplementation... 查看详情

trading_paln&record

20160920:GBPJPY___sell___10___132.700___SELLLIMIT___GBPJPYisatrendquotes--choosethetrend1strategy--breaktrade. 20160921:plan:RB1701___sell___4.00____2265..00__15minthemacdcolumnarislowerbefore.GB 查看详情

C#如何在按下w,s,a,d按钮时删除'ding'系统声音

】C#如何在按下w,s,a,d按钮时删除\\\'ding\\\'系统声音【英文标题】:C#Howtoremove\'ding\'systemsoundwhenw,s,a,dbuttonsarepressedC#如何在按下w,s,a,d按钮时删除\'ding\'系统声音【发布时间】:2018-02-2812:53:29【问题描述】:首先我不能用KeyE... 查看详情

c#代码实现邮箱验证c#中及一些常用的正则表达式

需要引用       usingSystem.Text.RegularExpressions;Regexr=newRegex("^\s*([A-Za-z0-9_-]+(\.\w+)*@(\w+\.)+\w{2,5})\s*$");if(r.IsMatch([email protected])){Messa 查看详情

c#调用qq音乐、酷狗音乐api

参考技术A直接上例子,最后拼得的url可以用MediaElement控件在线播放QQ音乐      https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=2&w=九张机      //songmid可以从歌曲信息中取到... 查看详情

c#三目表达式

W_User.User_Free=W_User.User_Free==true?false:true;  查看详情

c#中一些常用的正则表达式

需要引用usingSystem.Text.RegularExpressions;        Regexr=newRegex("^\s*([A-Za-z0-9_-]+(\.\w+)*@(\w+\.)+\w{2,5})\s*$");      & 查看详情

用于 C# 的 Maven API

】用于C#的MavenAPI【英文标题】:MavenAPIforC#【发布时间】:2012-09-0919:19:19【问题描述】:Maven的API在C#中可用吗?我有一个C#应用程序,我可以通过它访问Maven,但目前是通过Process和cmd.exe进行的。我所有的搜索只是告诉我如何使用... 查看详情

SQL UPSERT QUERY W/基于 3 个字段的唯一重复行 (C# VisStudio)

】SQLUPSERTQUERYW/基于3个字段的唯一重复行(C#VisStudio)【英文标题】:SQLUPSERTQUERYW/DuplicateRowsMadeUniqueBasedUpon3Fields(C#VisStudio)【发布时间】:2020-09-2320:02:48【问题描述】:背景是我正在建立一个SQL连接,该连接采用.csv文件并将其导入SQL... 查看详情