访问Genius api时,如何修复HTTP版本不受支持的错误?

2024-05-23 14:39:49 发布

您现在位置:Python中文网/ 问答频道 /正文

关于这个问题的许多解决方案都是通过简单地使用Requests库来解决的,但是当我试图使用Requests库来访问Genius api时,它没有正确地授权,使用urllib时,它的描述是The access token is expired, revoked, malformed, or invalid for other reasons.,它可以正确地授权和访问api而不会出错,除非HTTP版本不受支持的错误再次出现,这通常是在第一个GET请求之后。我也尝试过this solution,但也无法解决错误。如何修复此错误,以便访问Genius api?我的源代码如下所示

def find_lyrics(info):
# https://github.com/jasonqng/genius-lyrics-search/blob/master/search.py for accessing api
"""
Given info is list containing [author, title]
"""
search_req = Request("http://api.genius.com/search?q=" + " ".join(info))
search_req.add_header("Authorization", "Bearer " + TOKEN)
search_req.add_header("User-Agent", "curl/7.9.8 (i686-pc-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6b) (ipv6 enabled)") #Must include user agent of some sort, otherwise 403 returned

while True:
    try:
        search_res = urlopen(search_req, timeout=4) #timeout set to 4 seconds; automatically retries if times out
        search_raw = search_res.read()
    except socket.timeout:
        print("Timeout raised and caught")
        continue
    break

print(search_raw["meta"]["status"])
print(search_raw["response"]["hits"])
return search_raw

Tags: infocomapiforsearchrawis错误