2017年10月

okex本地正常,但放到国外服务器报错:Access Denied The owner of this website has banned your access based on your browser's signature

故障现象:本地(国内IP)调试正常,放到国外服务器上,程序就报错,Access Denied The owner of this website has banned your access based on your browser's signature

这是在爬虫中一类比较常见的问题,远端服务器为防止各类攻击行为,会对请求做判断。
okex也一样,但可惜的是,okex官方API文档中的说明不够详尽。

官方说明:

![2345截图20171028170615.png][1]

按照官方配置说明,报错依旧。

直接通过国外服务器访问okex的depth页面,正常。

总体来说,是因为headers的问题,于是直接忽略官方文档的提示,将headers改进一下

headers = {
               'apisign':sign,
               "Content-type" : "application/x-www-form-urlencoded",
                'Connection':'keep-alive',
                'Cache-Control':'max-age=0',
                'Accept': 'text/html, */*; q=0.01',
                'X-Requested-With': 'XMLHttpRequest',
                'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
                'DNT':'1',
                'Accept-Language': 'zh-CN,zh;q=0.8,ja;q=0.6',
               }  

恢复正常。

其实就是骗了一下对方服务器,说我其实是个浏览器。
[1]: http://www.zilly.cn/usr/uploads/2017/10/1770619581.png

服务器获取到远程的timestamp总是不准?

不准的原因我不知道,同步周期默认5分,通过以下参数,修改为你想要的时间间隔即可:

HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->W32Time->TimeProviders->NtpClient分支,并双击SpecialPollInterval键值,将对话框中的“基数栏”选择到“十进制”上,输入框中显示的数字正是自动对时的间隔(以秒为单位),比如默认的604800就是由7(天)×24(时)×60(分)×60(秒)计算来的。设定时间同步周期为一天,即24小时(86400秒),填入对话框,选十进制就填86400,选十六进制就填15180,点击确定保存关闭对话框。

我设置了 30秒更新一次。

gatecoin API 报错:{"responseStatus":{"errorCode":"1023","message":"Not logged in"}}

话说这个意思是,没登陆!
API是不需要登录的,这个我很确定,只要key就OK了啊
所以找key的问题,会不会是key或者sign没传递过去?
而且如果通过HBUILDER发送请求过去,返回的居然是404!网页没找到???
通过chrome查看返回的header,里边是401错误,网页没授权,应该是一致的原因。

怀疑可能是api_key设置问题,删除重新设置一个新的

报错变了:
You are not authorized. (你未被授权)

未被授权,那么故障应该出在以下几个地方:
1,APIKEY是否正确
2、PUBLIC_KEY是否成功传递
3、加密方法是否正确

最后终于发现,加密方法的问题,官方文档中,在POST前面多给了一个空格:
2345截图20171025105650.png

对于GET方式获取balance,不需要传递application/json,所以最后的加密字符串是:
gethttps://api.gatecoin.com/balance/balances1508900157.6588507
注意没有任何空格

bitbay 下订单API报错:{'code': 0, 'message': 'offer funds scale issue'}

通过查看日志,发现下订单时,有时候没问题,有时候就报这个错误。
字面意思:提供的资金规模问题。
其实意思是说,资金的数量,amount有问题,我不知道为什么用scale代替API文档中出现的amount,但最后发现,实际是发送的数量有问题。
什么问题呢?

是python的浮点运算的问题,当对str进行float时,比如你提供了0.104,float后,变成了0.10400000000000001,这时候,API下单就会报错:{'code': 0, 'message': 'offer funds scale issue'}

通过格式修改,把数值修改为0.104后,就不再报错了。