【问题标题】:Python requests handle url contains callbackPython 请求句柄 url 包含回调
【发布时间】:2018-12-16 10:41:09
【问题描述】:

https://www.goodreads.com/api/index包含js调用json api的例子

           <script type="text/javascript">
            function myCallback(result) {
              alert('nb of reviews for book: ' + result.reviews.length);
            }
            var scriptTag = document.createElement('script');
            scriptTag.src = "https://www.goodreads.com/book/isbn/0441172717?callback=myCallback&format=json&user_id=123456789";
            document.getElementsByTagName('head')[0].appendChild(scriptTag);
            </script>

坦率地说,我很奇怪 url 可以包含回调函数名称。这里有什么秘密?有没有相关的js文档?

无论如何,这是一个 javascript 示例。如果我想使用 python requests 来做同样的工作。我应该怎么做?

我完全被困在这里了。

感谢您的建议。

【问题讨论】:

    标签: javascript python api promise python-requests


    【解决方案1】:

    这种类型的调用实际上只在浏览器中使用,因此它不适用于 Python 请求。

    这是一个 JSONP 请求的示例,它是一种发出 cross-origin request 的方法,例如,您在 foobar.com 上服务的应用想要向 example.com 发出 POST 请求。在许多(但不是全部)情况下,出于安全原因,您的浏览器会阻止此类请求。

    在这种情况下,请求的结果被传递给回调,然后由浏览器执行。

    之前已经提出过相关问题,对 JSONP 有一个很好的解释——它是如何工作的,以及为什么要在这里使用它:https://stackoverflow.com/a/2067584/3084820

    如果您使用requests,则不会有跨域问题,因为您将从服务器端发出该请求。我不熟悉 goodreads API,但我怀疑他们有一个可以从服务器调用的端点版本。

    注意:Goodreads API 相当怪异且文档不完整。我玩过这个并且能够使用requests 让它工作,但是EG 你需要将你的API 密钥发送为key=... 而不是user_id=...

    【讨论】:

    • 学到了新知识JSONP,非常感谢。虽然以前从未使用过,但希望以后不需要使用。顺便说一句,如果你通过key,它将起作用并且只返回xml。如果您将user_id 传递给json,则它仅适用于浏览器,但不适用于python 请求
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多