URL-адрес запроса Python содержит обратный вызов

1

https://www.goodreads.com/api/index содержит пример, как вызвать json api с помощью js

           <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. Если я хочу использовать requests Python, чтобы сделать ту же работу. Как и что мне делать?

Я полностью застрял здесь.

Спасибо за совет.

Теги:
python-requests
promise

1 ответ

2
Лучший ответ

Этот тип вызова действительно используется только из браузера, поэтому он не будет применяться к запросу Python.

Это пример запроса JSONP, который представляет собой способ сделать запрос кросс-источника, например, ваше приложение, обслуживаемое на foobar.com хочет сделать запрос POST для example.com. Во многих (но не во всех) случаях такие запросы будут блокироваться вашим браузером по соображениям безопасности.

В этом случае результат запроса передается обратному вызову, который затем выполняется браузером.

Связанные вопросы задавались ранее, есть хорошее объяснение JSONP--, как это работает, и почему вы хотели бы использовать его здесь: qaru.site/questions/529/...

Если вы используете requests вас не будет проблем с перекрестным происхождением, поскольку вы будете делать этот запрос со стороны сервера. Я не знаком с API Goodreads, но подозреваю, что у них есть версия конечной точки, которую можно вызывать с сервера.

ПРИМЕЧАНИЕ. API Goodreads довольно странный и недостаточно документированный. Я поиграл с этим и смог заставить его работать, используя requests, но, к user_id=... вам нужно отправить свой ключ API в качестве key=... не user_id=...

  • 0
    узнал новые знания JSONP , спасибо так много. Хотя никогда не использовался раньше и, надеюсь, не нужно использовать в будущем. Кстати, если вы передадите key , он будет работать и вернет только xml . Если вы передаете user_id для json , он работает только для браузера, но не из запроса Python

Ещё вопросы

Сообщество Overcoder
Наверх
Меню