houtianze / bypy

Python client for Baidu Yun (Personal Cloud Storage) 百度云/百度网盘Python客户端
MIT License
7.86k stars 1.4k forks source link

使用不了了?调任何接口都是http code 400 #74

Closed liyongxiong closed 10 years ago

liyongxiong commented 10 years ago

注:用xxx替换了部分信息。 我使用了自己的apikey和secretkey

[root@vm bypy]# python2.7 bypy.py info -d Token file: '/root/.bypy.json' Hash Cache file: '/root/.bypy.pickle' App root path at Baidu Yun '/apps/xxxx' sys.stdin.encoding = UTF-8 sys.stdout.encoding = UTF-8

Token loaded: {u'access_token': u'xxxx', u'expires_in': 2592000, u'session_secret': u'xxxxxxx', u'scope': u'basic netdisk', u'session_key': u'xxxxxx', u'refresh_token': u'xxxx'} GET https://pcs.baidu.com/rest/2.0/pcs/quota actargs: None Params: {u'method': u'info'} HTTP Status Code: 400 [09:57:12] Error accessing 'https://pcs.baidu.com/rest/2.0/pcs/quota' [09:57:12] Function: __quota_act [09:57:12] Website parameters: {u'method': u'info'} [09:57:12] Waiting 10 seconds before retrying... ^CSignal 2 received, Abort Frame: [root@vm bypy]#
houtianze commented 10 years ago

我这里测试可用啊,是不是网络出现了问题?

liyongxiong commented 10 years ago

[root@vm bypy]# ping pcs.baidu.com PING pcs.n.shifen.com (202.108.23.100) 56(84) bytes of data. 64 bytes from 202.108.23.100: icmp_seq=1 ttl=52 time=2.12 ms 64 bytes from 202.108.23.100: icmp_seq=2 ttl=52 time=2.26 ms 64 bytes from 202.108.23.100: icmp_seq=3 ttl=52 time=1.99 ms 64 bytes from 202.108.23.100: icmp_seq=4 ttl=52 time=2.08 ms ^C --- pcs.n.shifen.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3536ms rtt min/avg/max/mdev = 1.992/2.117/2.268/0.104 ms [root@vm bypy]# curl https://pcs.baidu.com/rest/2.0/pcs/quota {"error_code":3,"error_msg":"Unsupported open api","request_id":1241839942} [root@vm bypy]#

liyongxiong commented 10 years ago

我故意毁坏access_token(修改了几个字符)导致access_token失效,它又能正常的refresh回来。

[root@vm bypy]# python2.7 bypy.py info -d Token file: '/root/.bypy.json' Hash Cache file: '/root/.bypy.pickle' App root path at Baidu Yun '/apps/test-my-app' sys.stdin.encoding = UTF-8 sys.stdout.encoding = UTF-8

Token loaded: {u'access_token': u'xxx', u'expires_in': 2592000, u'session_secret': u'xxx', u'scope': u'basic netdisk', u'session_key': u'xxx', u'refresh_token': u'xxx'} GET https://pcs.baidu.com/rest/2.0/pcs/quota actargs: None Params: {u'method': u'info'} HTTP Status Code: 401 Need to refresh token, refreshing POST https://openapi.baidu.com/oauth/2.0/token actargs: None Params: {u'client_secret': u'xxx', u'grant_type': u'refresh_token', u'client_id': u'xxxx', u'refresh_token': u'xxx'} HTTP Status Code: 200 Request OK, processing action access token: xxx Authorize JSON: {u'access_token': u'xxx', u'expires_in': 2592000, u'session_secret': u'xxx', u'scope': u'basic netdisk', u'session_key': u'xxx', u'refresh_token': u'xxx'} Request all goes fine GET https://pcs.baidu.com/rest/2.0/pcs/quota actargs: None Params: {u'method': u'info'} HTTP Status Code: 400 [14:07:44] Error accessing 'https://pcs.baidu.com/rest/2.0/pcs/quota' None [14:07:44] Function: __quota_act [14:07:44] Website parameters: {u'method': u'info'} [14:07:44] Waiting 10 seconds before retrying... [14:07:54] Request Try #2 / 5 GET https://pcs.baidu.com/rest/2.0/pcs/quota actargs: None Params: {u'method': u'info'} HTTP Status Code: 400 [14:07:54] Error accessing 'https://pcs.baidu.com/rest/2.0/pcs/quota' None [14:07:54] Function: __quota_act [14:07:54] Website parameters: {u'method': u'info'} [14:07:54] Waiting 20 seconds before retrying... ^CSignal 2 received, Abort Frame: [root@vm bypy]#
houtianze commented 10 years ago

这个感觉有点怪异。。还是不行?

liyongxiong commented 10 years ago

找到原因了,我替换了我自己的app,但是API服务列表里没开通PCI API。。。寒,打扰了。供日后碰到这个问题的同学参考。

http://developer.baidu.com/console#manage/apilist!appid=xxxx(xxx替换为自己的appid

liyongxiong commented 10 years ago

顺便的,我是修改了源代码才发现问题的。 在__request_work函数里,失败的情况下只输出了r.status_code的调式信息,输出r.text那句默认被注释了,我打开了才发现提示信息是这样的:{"error_code":31024,"error_msg":"app id is empty","request_id":xxxx}

houtianze commented 10 years ago

哦,原来如此。 关掉那个r.text是因为下载大文件的时候如果打开-d开关,程序会卡死。

liyongxiong commented 10 years ago

可以考虑改为当http code不是200的时候才print

houtianze commented 10 years ago

__dump_exception()里有详细的print,为什么没出来呢?

liyongxiong commented 10 years ago

这种情况不是异常,__dump_exception()在异常处理里

houtianze commented 10 years ago

不只是异常才会调用的,只要返回码不是2xx,正常情况下都会调用的。