搜索
查看: 2230|回复: 11

再求教一个json接口传输post的问题,传输参数带"-"的怎么处理?

[复制链接]

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
发表于 2017-11-17 10:17:03 | 显示全部楼层 |阅读模式
对方给的接口要求传输这些内容
  1. /* POST /v1/order/orders/place {
  2.    "account-id": "100009",
  3.    "amount": "10.1",
  4.    "price": "100.1",
  5.    "source": "api",
  6.    "type": "buy-limit"
  7. } */
  8. {
  9.   "status": "ok",
  10.   "data": "59378"
  11. }
复制代码


这种格式的应该用restClient.post 还是用 http.post 方式?

其中account-id 中间有“-”符号,运行报错怎么破?
回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 10:17:40 | 显示全部楼层
万能的版主帮帮忙
回复

使用道具 举报

12

主题

678

帖子

4003

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4003
发表于 2017-11-17 10:26:47 | 显示全部楼层
//提交上传文件表单
http.sendMultipartForm(
    [
"account-id"] ="100009";
    amount =
"10.1";
    price=
"100.1";
    source=
"api";
    [
"type"] = "buy-limit"
);

回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 10:29:54 | 显示全部楼层
xauto 发表于 2017-11-17 10:26
//提交上传文件表单
http.sendMultipartForm(
    ["account-id"] ="100009";

谢谢兄弟,我去试试
回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 10:54:48 | 显示全部楼层
  1.     var placeJson = restClient.post("https://" + Domain + action +"?"+data + "&Signature=" + createSign(method,action,data) ,{
  2.                         ['account-id'] = get_accountid();
  3.                            amount = "10.1";
  4.                            price = "100.1";
  5.                            source = "api";
  6.                            symbol = "btcusdt";
  7.                            ['type'] = "buy-limit";
  8.                 } );
  9.         console.dumpJson(placeJson);
复制代码


这样写对吗?兄弟帮忙看一下,谢谢啦
回复

使用道具 举报

12

主题

678

帖子

4003

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4003
发表于 2017-11-17 11:00:17 | 显示全部楼层
zchenxi 发表于 2017-11-17 10:54
这样写对吗?兄弟帮忙看一下,谢谢啦

我都不知道 你要post的网址 和 post 的参数 你这样发一段
我也不知道对不对...
回复

使用道具 举报

12

主题

678

帖子

4003

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4003
发表于 2017-11-17 11:01:07 | 显示全部楼层
运行能得到你想要得到的数据就对了
回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 11:17:23 | 显示全部楼层
xauto 发表于 2017-11-17 11:01
运行能得到你想要得到的数据就对了

我也不知道对不对,这里运行的时候返回 校验错误,不知道是不是这里的原因,我再继续排查一下。
谢谢兄弟了
回复

使用道具 举报

187

主题

2540

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14034
发表于 2017-11-17 12:36:52 | 显示全部楼层
zchenxi 发表于 2017-11-17 11:17
我也不知道对不对,这里运行的时候返回 校验错误,不知道是不是这里的原因,我再继续排查一下。
谢谢兄 ...

在aardio里,如果一个变量的名字不符合aardio变量命名规则,就需要放到中括号里用下标的形式去写。
http.sendMultipartForm(
    ["account-id"] ="100009";
    ["amount"] = "10.1";
    ["price"]= "100.1";
    [" source"]= "api";
    ["type"] = "buy-limit"
);
这是发送文件表单。
    var placeJson = restClient.post("https://" + Domain + action +"?"+data + "&Signature=" + createSign(method,action,data) ,{
                        ['account-id'] = get_accountid();
                           amount = "10.1";
                           price = "100.1";
                           source = "api";
                           symbol = "btcusdt";
                           ['type'] = "buy-limit";
                } );
        console.dumpJson(placeJson);
你这个写法似乎是有问题的,method,,action,data这些都是从哪里来的呢?
一般rest接口取签名的方法应当先得到参数,你这个写法也不像是对的。

回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 12:39:57 | 显示全部楼层
Jacen.He 发表于 2017-11-17 12:36
在aardio里,如果一个变量的名字不符合aardio变量命名规则,就需要放到中括号里用下标的形式去写。
这是 ...

嗯嗯 是有问题,我再换下方法
回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 12:53:43 | 显示全部楼层
zchenxi 发表于 2017-11-17 12:39
嗯嗯 是有问题,我再换下方法

,method,,action,data这个是定义的变量,加起来其实就是一个post的目标网址

就是这个地址 https://api.huobi.pro/v1/order/orders


搞了两天了实在走不通,版主能帮忙看看吗?
这是火币网api的文档:  https://github.com/huobiapi/API_Docs/wiki/REST_api_reference

文档里面的GET方式的可以通了,就这个post 的一直提示api-signature-not-valid错误
回复

使用道具 举报

6

主题

19

帖子

126

积分

一级会员

Rank: 2

积分
126
 楼主| 发表于 2017-11-17 13:21:26 | 显示全部楼层
Jacen.He 发表于 2017-11-17 12:36
在aardio里,如果一个变量的名字不符合aardio变量命名规则,就需要放到中括号里用下标的形式去写。
这是 ...

这是他给出的python的源码示例,版主能帮忙看看aardio是应该怎样写post这段


  1. def api_key_post(params, request_path):
  2.     method = 'POST'
  3.     timestamp = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')
  4.     params_to_sign = {'AccessKeyId': ACCESS_KEY,
  5.                       'SignatureMethod': 'HmacSHA256',
  6.                       'SignatureVersion': '2',
  7.                       'Timestamp': timestamp}

  8.     host_url = TRADE_URL
  9.     host_name = urllib.parse.urlparse(host_url).hostname
  10.     host_name = host_name.lower()
  11.     params_to_sign['Signature'] = createSign(params_to_sign, method, host_name, request_path, SECRET_KEY)
  12.     print('签名post\n' + params_to_sign['Signature'])
  13.     url = host_url + request_path + '?' + urllib.parse.urlencode(params_to_sign)
  14.     return http_post_request(url, params)


  15. def createSign(pParams, method, host_url, request_path, secret_key):
  16.     sorted_params = sorted(pParams.items(), key=lambda d: d[0], reverse=False)
  17.     encode_params = urllib.parse.urlencode(sorted_params)
  18.     payload = [method, host_url, request_path, encode_params]
  19.     payload = '\n'.join(payload)
  20.     payload = payload.encode(encoding='UTF8')
  21.     secret_key = secret_key.encode(encoding='UTF8')
  22.     print("签名数据")
  23.     print(payload)
  24.     digest = hmac.new(secret_key, payload, digestmod=hashlib.sha256).digest()
  25.     signature = base64.b64encode(digest)
  26.     signature = signature.decode()
  27.     return signature


  28. # 下单
  29. def orders(amount, source, symbol, _type, price=0):
  30.     """
  31.    
  32.     :param amount:
  33.     :param source:
  34.     :param symbol:
  35.     :param _type: 可选值 {buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖}
  36.     :param price:
  37.     :return:
  38.     """
  39.     accounts = get_accounts()
  40.     acct_id = accounts['data'][0]['id'];

  41.     params = {"account-id": acct_id,
  42.               "amount": amount,
  43.               "symbol": symbol,
  44.               "type": _type,
  45.               "source": source}
  46.     if price:
  47.         params["price"] = price

  48.     url = "/v1/order/orders"
  49.     return api_key_post(params, url)


  50.     # print('下单')
  51.     # print(HuobiServices.orders(0.01, 'api', 'ethcny', 'buy-limit', 1000))
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-11-22 04:57 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表