URL-адрес запроса Python содержит обратный вызов - PullRequest
0 голосов
/ 16 декабря 2018

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

Я здесь застрял.

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

1 Ответ

0 голосов
/ 16 декабря 2018

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

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

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

Соответствующие вопросы задавались ранее, есть хорошее объяснение JSONP - как он работает и почему вы хотели бы использовать его здесь: https://stackoverflow.com/a/2067584/3084820

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

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

...