有人可以帮助我在python代码的urllib请求?



我正在尝试制作一个程序,该程序向巴西空军制作的一个免费API请求气象消息并向用户显示。这个程序在前三个小时工作得很好,但之后,它按顺序显示错误,并且不执行消息。

try:
#caso o resultado anterior não gere dados, sera feita nova conexão
print(self.horapesquisa)
objurl = urllib.request.urlopen(f'http://redemet.decea.gov.br//api/consulta_automatica/index.php?local={self.sigla_localidade}&msg=metar&data_ini={self.horapesquisa}&data_fim={self.horapesquisa}')
if objurl.getcode() == 200:
self.dados = objurl.read()
self.dados = str(self.dados)
inicio = self.dados.find('METAR')
fim = self.dados.find('=')
self.dados = self.dados[inicio:fim+1]
except:

错误:

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersclaudAppDataLocalProgramsPythonPython310libtkinter__init__.py", line 1921, in __call__
return self.func(*args)
File "C:UsersclaudAppDataLocalProgramsPythonPython310libtkinter__init__.py", line 839, in callit
func(*args)
File "c:UsersclaudOneDriveDocumentosmeuusprojetosMETARmain.py", line 30, in infa
met = modulos.Metar(localidade,verificador_atraso)
File "c:UsersclaudOneDriveDocumentosmeuusprojetosMETARmodulosmodulos.py", line 41, in __init__
objurl = urllib.request.urlopen(f'http://redemet.decea.gov.br//api/consulta_automatica/index.php?local={self.sigla_localidade}&msg=metar&data_ini={self.horapesquisa}&data
_fim={self.horapesquisa}')
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 519, in open
response = self._open(req, data)
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 536, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 496, in _call_chain
result = func(*args)
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 1377, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:UsersclaudAppDataLocalProgramsPythonPython310liburllibrequest.py", line 1351, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>

一些带有API的站点有速率限制。我想你已经达到这个极限了。试一试:

import socket
print(socket.getaddrinfo('redemet.decea.gov.br', 80))

如果可以连接,应该会看到以下输出:

[(<AddressFamily.AF_INET: 2>,
<SocketKind.SOCK_STREAM: 1>,
6,
'',
('177.203.219.24', 80)),
(<AddressFamily.AF_INET: 2>,
<SocketKind.SOCK_DGRAM: 2>,
17,
'',
('177.203.219.24', 80)),
(<AddressFamily.AF_INET: 2>,
<SocketKind.SOCK_RAW: 3>,
0,
'',
('177.203.219.24', 80))]

最新更新