如何修复无效的 API 密钥、IP 或操作权限错误?

Posted

技术标签:

【中文标题】如何修复无效的 API 密钥、IP 或操作权限错误?【英文标题】:How to fix Invalid API-key, IP, or permissions for action error? 【发布时间】:2020-01-22 07:55:48 【问题描述】:

这是币安加密交易所 API。我试图获取帐户信息,但我做不到。它是官方的 C++ API。 This is github link。这是终端上的错误。回答问题时,请放轻松。我是新手

2020-01-22 10:32:04 085219 :

2020-01-22 10:32:04 085245:网址 = |https://api.binance.com/api/v1/userDataStream|

2020-01-22 10:32:04 085253:

2020-01-22 10:32:04 698466:

2020-01-22 10:32:04 698529:完成

2020-01-22 10:32:04 701234:完成

2020-01-22 10:32:04 701434:完成。

2020-01-22 10:32:04 701472:完成。

“代码”:-2015, "msg" : "API 密钥、IP 或操作权限无效。"

[2020/01/22 10:32:04:7018] 注意:未编译 libuv 支持

[2020/01/22 10:32:04:7045] 注意:创建 Vhost 'default' 端口 -1, 1 个协议,IPv6 关闭

[2020/01/22 10:32:04:7046] 注意:为默认创建了客户端 ssl 上下文

[2020/01/22 10:32:04:7099] 注意:lws_client_connect_2: 0x239f3e0: 地址 stream.binance.com

[2020/01/22 10:32:05:3128] 注意:lws_client_connect_2: 0x239f3e0: 地址stream.binance.com

我在这里输入了我的密钥。

 using namespace std;


#define API_KEY         "my api key here,deleted for security"
#define SECRET_KEY      "secret key is here, deleted for security"

主要功能

int main() 

    Json::Value result;
    long recvWindow = 10000;    

    string api_key      = API_KEY;
    string secret_key   = SECRET_KEY;
    BinaCPP::init( api_key , secret_key );


    // User Balance
    BinaCPP::get_account( recvWindow , result );
    for ( int i  = 0 ; i < result["balances"].size() ; i++ ) 
        string symbol = result["balances"][i]["asset"].asString();
        userBalance[symbol]["f"] = atof( result["balances"][i]["free"].asString().c_str() );
        userBalance[symbol]["l"] = atof( result["balances"][i]["locked"].asString().c_str() );
    
    print_userBalance();

    // User data stream 
    BinaCPP::start_userDataStream(result );
    cout << result << endl;

    string ws_path = string("/ws/");
    ws_path.append( result["listenKey"].asString() );



    BinaCPP_websocket::init();
    BinaCPP_websocket::connect_endpoint( ws_userStream_OnData , ws_path.c_str() ); 
    BinaCPP_websocket::enter_event_loop(); 



这是 BinaCPP.cpp 的一部分

#include "binacpp.h"
#include "binacpp_logger.h"
#include "binacpp_utils.h"




string BinaCPP::api_key = "my api key here";
string BinaCPP::secret_key = "secret key here";
CURL* BinaCPP::curl = NULL;




//---------------------------------
void 
BinaCPP::init( string &api_key, string &secret_key ) 

    curl_global_init(CURL_GLOBAL_DEFAULT);
    BinaCPP::curl = curl_easy_init();
    BinaCPP::api_key = api_key;
    BinaCPP::secret_key = secret_key;

【问题讨论】:

您是否也将BinaCPP::api_key 填写为API_KEY?很难说。 @Botje 是的,先生,我做到了。 您能否对来自同一 IP 的 curl 执行相同的操作?这排除了您的 API 密钥对于链接的操作/IP 组合无效。 @Botje 我想找到了原因,但我使用的是官方 API 和示例。我完全不懂。 pastebin.pl/view/f4e0e9cf 您如何在编译示例失败的同时产生错误消息? 【参考方案1】:

我相信这是我在 python 中遇到的错误。 如果您使用 binance.us 而不是 binance.com 设置您的币安账户,您需要确保在源文件中进行更改。在 python 中,初始化客户端类时就像传递 'tld="us"' 参数一样简单。

我看到你有“ url = |https://api.binance.com/api/v1/userDataStream|” 您可能需要“ url = |https://api.binance.us/api/v1/userDataStream|”

另外,我注意到您的网址包含 api/v1,只是想确保当您获取帐户信息或其他需要您的 api_secret 密钥的请求时,它应该翻转 api/v2 或 api/v3。

我不熟悉 C++,但这里有一个在 python 中执行查找/替换的解决方案。希望这些信息对您有所帮助!

您需要导航到您在 github 下载的文件所在的目录并尝试以下操作:

检查此代码以确保它不会替换您可能需要的任何 .com。

import os
for root, dirs, files in os.walk(os.curdir):
    for f in files:
        file_name = os.path.join(root, f):
            try:
                with open(file_name, 'r') as fp:
                    data = fp.read().replace('.com', '.us')
                with open(file_name, 'w') as fp:
                    fp.write(data)
            except:
                print(f.ljust(20), 'failed')

【讨论】:

tld='us' 为我工作。有几个地方美国用户必须仔细检查以确保他们在正确的位置连接,例如 url 和他们下载的应用程序。【参考方案2】:

对我来说,我必须登录 Binance API Management page 并更新我的白名单 IP 地址,因为我已经更改了我的互联网提供商。永远值得一试!

【讨论】:

以上是关于如何修复无效的 API 密钥、IP 或操作权限错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复来自 Google Ads API 的无效 JSON 负载错误

SendGrid API 密钥不起作用。 “提供的授权授权无效、过期或撤销”

Azure 搜索服务 REST API 删除错误:“文档密钥不能丢失或为空。”

api 地理编码错误响应“此 IP、站点或移动应用程序无权使用此 API 密钥”

如何修复 Google Api 错误:禁止:将应用程序上传到 Play 商店时,Android App Bundle 使用错误的密钥签名

MailChimp 错误状态:401 标题:“API 密钥无效”