首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOUNDCLOUD :使用soundcloud获取429错误响应的主体

SOUNDCLOUD :使用soundcloud获取429错误响应的主体
EN

Stack Overflow用户
提问于 2016-12-29 12:48:00
回答 1查看 182关注 0票数 0

我在UbuntuServer16.04.1(与soundcloud-python一起安装)上使用用于Soundcloud的https://github.com/soundcloud/soundcloud-python

Soundcloud速率限制官方页面https://developers.soundcloud.com/docs/api/rate-limits#play-requests说,如果应用程序超过API速率限制,429 Client Error响应的主体将是一个JSON对象,包含一些附加信息。

我感兴趣的是获取reset_time字段,以通知用户该块何时结束。

问题是,例如,当超过了速率限制,执行response = client.put('/me/favorites/%d' % song_id)时,应用程序就会崩溃,而responsenull

如何获得JSON响应体?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 13:54:07

你为什么不自己读软件包的源代码,自己找出来呢?

让我看看..。您没有解释您得到了那个client对象,但是我们可以看到有一个"client.py“模块定义了一个Client类。这个类没有明确地定义put方法,但是它定义了钩子

代码语言:javascript
复制
def __getattr__(self, name, **kwargs):
    """Translate an HTTP verb into a request method."""
    if name not in ('get', 'post', 'put', 'head', 'delete'):
        raise AttributeError
    return partial(self._request, name, **kwargs)

好的,所以Client.put(...)返回一个部分对象包装Client._request,这是一种非常复杂的将Client.put(**kwargs)定义为return self._request("put", **kwargs)的方法。

现在让我们看一看Client._request:它基本上进行了一些正常检查,更新了**kwargs并返回了wrapped_resource(make_request(method, url, kwargs))

查看模块开头的导入,我们可以看到make_request来自"request.py“,wrapped_resource来自"resources.py”。

您提到,在超过“崩溃应用程序”的速率限制时执行api调用--我假设您的意思是“引发异常”(BTW请在讨论此类问题时发布异常和回溯)--因此,假设这是在较低级别处理的,那么让我们从request.make_request开始。大量的数据格式化/传递显然是最终的有趣的部分:对response.raise_for_status()的调用。这是一个提示,我们实际上将委托给著名的套餐,它实际上已确认为上面几条线在需求文件中

如果我们阅读python-请求精细手册,我们就会发现raise_for_status做了什么--它为客户机(4XX)和服务器(5XX)状态代码引发了一个requests.exceptions.HTTPError

好了,现在我们知道我们有什么例外。注意到,您的异常和追溯中已经包含了所有这些信息,如果您将其发布在这里,这将为我们节省很多痛苦。

但不管怎样..。看来我们不会得到响应内容了,是吗?嗯,等等,我们还没有完成--python-请求是一个设计得相当好的包,所以我们仍然可以拯救我们的响应。事实上,如果我们查看requests.exceptions源代码,我们会发现HttpErrorRequestException的一个子类,而RequestException是带有"requestresponse对象“的"Initialize(d)”。

万岁,我们确实有自己的反应--例外。因此,我们所要做的就是捕捉异常并检查它的response属性--它应该包含“附加信息”。

现在请理解,这需要我花半个多小时的时间来编写,但是在没有跟踪的情况下,大约要花7分钟的时间--如果有了回溯,它只需要2分钟的时间,就可以转到requests.exceptions源代码,并确保它保持请求和响应。好吧,我作弊了,我习惯于阅读源代码,我经常使用python--请求很多,但是仍然:你可以在不到一个小时的时间内解决这个问题,特别是使用python的交互式shell,它让您能够实时地探索和测试活动对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41380049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档