Olá.
Eu estou tentando fazer utilizar uma API com a biblioteca urllib do do Python. E eu estou obtendo alguns erros e tendo alguma dificuldade de encontrar a solução pra eles. A API está descrita aqui: https://metmuseum.github.io/.
O que eu estou tentando fazer é uma requisição para a URL a seguir e armazenar o resultado num dicionário, usando a biblioteca Json.
"https://collectionapi.metmuseum.org/public/collection/v1/search?hasImages=true"
from urllib.request import urlopen
import json
r = urlopen("https://collectionapi.metmuseum.org/public/collection/v1/search?hasImages=true")
resposta = json.loads(r.read())
O problema é que essa requisição retorna alguns erros. Como esse aqui:
"http.client.RemoteDisconnected: Remote end closed connection without response"
Li a respeito que umas das possíveis causas pra esse erro é que alguns sites bloqueam requisições que não são feitas por browsers e que pra contornar isso seria necessário acrescentar um cabeçalho a requisição, contendo um parâmetro 'User-agent', pra identificar a fonte da requisição. Daí, eu defini o cabeçalho:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
data = bytes(json.dumps(headers), encoding='utf8')
r = urlopen("https://collectionapi.metmuseum.org/public/collection/v1/search?hasImages=true", data=data)
Ainda assim nada. Quando eu fiz a requisição passando o parâmetro data, eu obtive um outro erro que acusava que o método HTTP não era permitido. Por algum motivo, o método tava sendo alterado para 'POST' por debaixo dos panos, mas eu consegui alterar o método, construindo um objeto da requisição com urllib.request.Request(), e alterando o atributo method para 'GET'. Daí tentei de novo, e continuou dando o erro "http.client.RemoteDisconnected: Remote end closed connection without response".
Alguém tem alguma luz?