【问题标题】:Bitmarket.pl API translate from PHP to PythonBitmarket.pl API 从 PHP 转换为 Python
【发布时间】:2017-02-02 11:40:50
【问题描述】:

我在将 PHP 示例代码更改为 python 中的等效代码时遇到了严重问题。 这是一个示例 PHP 代码:

function bitmarket_api($method, $params = array())

{
    $key = "klucz_jawny";
    $secret = "klucz_tajny";

    $params["method"] = $method;
    $params["tonce"] = time();

    $post = http_build_query($params, "", "&");
    $sign = hash_hmac("sha512", $post, $secret);
    $headers = array(
        "API-Key: " . $key,
        "API-Hash: " . $sign,
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, "https://www.bitmarket.pl/api2/");
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $ret = curl_exec($curl);

    return json_decode($ret);
}

提前感谢您的帮助。

更新:

我的代码是:

apiurl = "https://www.bitmarket.pl/api2/"
key = "mypubkey"
secret = "myceretkey"

apicommand = "info"
tonce = time.time()

params = str(apicommand) + " " + str(tonce)

postdata = (params + " " + "&")

signdata = hmac.new(postdata, secret, hashlib.sha512).hexdigest()

headerapi = { "API-Key: ": key, 
"API-Hash: " : signdata}



getapi = requests.post(apiurl, data=headerapi ,params=postdata)
print getapi.text

结果:{"error":501,"errorMsg":"Invalid API key","time":1486049060}

【问题讨论】:

  • 昨天我花了几个小时试图通过 python 请求和 urllib2 发送正确的请求,现在我已经删除了整个代码,因为它根本不起作用。每个请求都以错误的身份验证消息完成。如果有人能让我知道发布数据的样子。我不懂 PHP,所以我很难弄明白。
  • 你试过谷歌:“用python发布数据”吗?
  • 是的,我认为我只是发送了错误的数据。 apiurl = "bitmarket.pl/api2" apidata = hmac.new("info", secret_key_here, hashlib.sha512).hexdigest() getapi = requests.post(apiurl, data=apidata)
  • 所以再试一次,如果你遇到困难,回来告诉我们你的尝试(用代码更新你的问题,不要在 cmets 中发布代码),我们可以提供帮助你从那里。现在,你基本上是在要求我们为你做你的工作......
  • 我已经给了,我昨天只是在这个表格中吸吮,现在我从早上 7 点开始与它战斗......如果我只知道那个 php 代码的结果是什么。无论如何感谢您的回复。

标签: php python api translation url-encoding


【解决方案1】:

解决办法是:

def mergeTwoDicts(x, y):
    z = x.copy()
    z.update(y)
    return z


def bitMarketPlApiCall(method, params = {}):
    postDataAsDict = mergeTwoDicts(params, {
        'method': method,
        'tonce': int(time.time())
    })
    postParamsAsString = "&".join([param + '=' +     str(postDataAsDict[param]) for param in postDataAsDict])

    postHeaders = {
        'API-Key': publicKey,
        'API-Hash': hmac.new(secretKey, postParamsAsString, hashlib.sha512).hexdigest()
}

    request_response = requests.post('https://www.bitmarket.pl/api2/', data = postParamsAsString, headers = postHeaders)

    return request_response.text

【讨论】:

    【解决方案2】:

    看看

    Curl issue in subprocess Python

    我确切指出了您的要求,然后有人为您将 PHP 翻译成 Python(这应该可以让您完成大约 90% 的工作。)

    【讨论】:

      猜你喜欢
      • 2019-12-16
      • 2023-04-08
      • 1970-01-01
      • 2012-12-03
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      相关资源
      最近更新 更多