настоящее время у меня следующий код (для личного пользования) для авторизации с Spotify Web APIУстановка IMG SRC не генерирует запрос GET
import http.server
import urllib.parse
from subprocess import call
authQuery = {}
class queryStrHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
print("received a get request")
urlComponents = urllib.parse.urlparse(self.path)
if urlComponents[4] == "":
print("sending payload")
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
html = """<html><head><script type="text/javascript">
alert("payload has been activated");
var tokenSupplier = document.createElement("img");
if(window.location.hash){
var fragment = window.location.hash.substring(1);
alert(fragment);
tokenSupplier.src = "http://localhost:8888/?" + fragment;
alert(tokenSupplier.src);
}
else {
var queryStr = window.location.href.split('?')[1];
tokenSupplier.src = "http://localhost:8888/?" + queryStr;
}
</script></head><body></body></html>"""
self.wfile.write(bytes(html, "utf-8"))
else:
print("receiving token or error")
global authQuery
authQuery = urllib.parse.parse_qs(urlComponents[4])
tokenFetcher = http.server.HTTPServer(('127.0.0.1', 8888), queryStrHandler)
authUrl = "https://accounts.spotify.com/authorize?" + urllib.parse.urlencode(
{
"client_id": "<ID here>",
"redirect_uri": "http://localhost:8888/",
"scope": "playlist-read-private user-library-read",
"response_type": "token"
}
)
call(["open", authUrl])
tokenFetcher.handle_request()
print(authQuery)
Поскольку фрагмент хэш в URL, что Spotify счета услуг переадресовывает пользователь после того, как пользователь разрешил доступ, не отправляется на сервер (этот скрипт), я отправляю полезную нагрузку HTML/JS, когда служба Accounts перенаправляет пользователя на localhost: 8888, который поддерживает домашний хэш-фрагмент, содержащий токен доступа через строку запроса в исходном URL-адресе элемента изображения стиля пикселя отслеживания. Когда это происходит, должна выполняться ветка else в функции do_GET. Однако установка src элемента изображения никогда не генерирует запрос GET, так как мой сценарий никогда не сообщает второй запрос GET, в результате этого словарь authQuery, который должен содержать токен доступа среди других вещей, остается пустым. Странная вещь, когда я не добавил код, который открывает браузер (линия вызова, которая использует команду открытия OS X, которая открывает URL-адрес или файл в приложении по умолчанию), но вручную просмотрела до http://localhost:8888/?aParameter=someValueHere «пиксель отслеживания» «Сделал работу!
Я прочитал, что из-за поведения кеширования браузеров, когда настройка src изображения может не сгенерировать запрос GET, предлагаемое решение добавляло уникальный URL-адрес URL-адреса src, чтобы избежать кеширования, однако это не должно быть необходимо в моем случае, поскольку токен доступа Spotify Web API в URL-адресе src уже уникален!
Что они имели в виду, чтобы сохранить изменения, что уникальный идентификатор для того, чтобы заставить GET reauest – Yerken
Я не знаю, как то, что вы говорите, отличается от того, что я сказал:/Маркер доступа отличается каждый раз, когда скрипт t запускается. – Superpelican