Anonymous
Python Requests.request возвращает мусор
Сообщение
Anonymous » 13 ноя 2025, 00:34
Вызов API. Почти для всех вызовов ответ приходит чистый, но для некоторых в возвращаемом json есть мусор. Выполнение мусорного в браузере Firefox с теми же параметрами возвращает чистый json. Рабочий код для тестирования:
Код: Выделить всё
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:144.0) Gecko/20100101 Firefox/144.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3',
'Accept-Encoding': 'gzip, deflate, br, zstd',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'https://veiculos.fipe.org.br',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': 'https://veiculos.fipe.org.br/',
'Cookie': 'ROUTEID=.5',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Priority': 'u=0',
'TE': 'trailers',
}
def api_call(url, headers, parameters):
try:
r = requests.request('post', url, headers=headers, data=parameters)
print (r.content)
r_json = r.json()
r.close()
return r_json
except Exception as e:
print(repr(e))
url = 'https://veiculos.fipe.org.br/api/veiculos/ConsultarAnoModelo'
# First call returning clean json
parameters = [('codigoModelo', 6906), ('codigoTabelaReferencia', 327), ('codigoTipoVeiculo', 1), ('CodigoMarca', 189)]
r_json = api_call(url, headers, parameters)
# Second call returning garbage
parameters = [('codigoModelo', 6340), ('codigoTabelaReferencia', 327), ('codigoTipoVeiculo', 1), ('CodigoMarca', 189)]
r_json = api_call(url, headers, parameters)
Второй вызов всегда вызывает ошибку JSONDecodeError из-за начальной последовательности \x8b\x15\x80 и конечной последовательности \x03
Код: Выделить всё
b'[{"Label":"2016 Gasolina","Value":"2016-1"},{"Label":"2014 Gasolina","Value":"2014-1"}]'
b'\x8b\x15\x80[{"Label":"2011 Gasolina","Value":"2011-1"}]\x03'
JSONDecodeError('Expecting value: line 1 column 1 (char 0)')
Ошибка, выполненная в браузере:
Есть идеи?
Благодаря комментарию теперь я знаю, что ошибки возникают только при запуске в виртуальной среде Python (venv).
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ng-garbage
1762983267
Anonymous
Вызов API. Почти для всех вызовов ответ приходит чистый, но для некоторых в возвращаемом json есть мусор. Выполнение мусорного в браузере Firefox с теми же параметрами возвращает чистый json. Рабочий код для тестирования: [code]import requests headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:144.0) Gecko/20100101 Firefox/144.0', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'en-US,en;q=0.8,pt-BR;q=0.5,pt;q=0.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://veiculos.fipe.org.br', 'DNT': '1', 'Sec-GPC': '1', 'Connection': 'keep-alive', 'Referer': 'https://veiculos.fipe.org.br/', 'Cookie': 'ROUTEID=.5', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', 'Priority': 'u=0', 'TE': 'trailers', } def api_call(url, headers, parameters): try: r = requests.request('post', url, headers=headers, data=parameters) print (r.content) r_json = r.json() r.close() return r_json except Exception as e: print(repr(e)) url = 'https://veiculos.fipe.org.br/api/veiculos/ConsultarAnoModelo' # First call returning clean json parameters = [('codigoModelo', 6906), ('codigoTabelaReferencia', 327), ('codigoTipoVeiculo', 1), ('CodigoMarca', 189)] r_json = api_call(url, headers, parameters) # Second call returning garbage parameters = [('codigoModelo', 6340), ('codigoTabelaReferencia', 327), ('codigoTipoVeiculo', 1), ('CodigoMarca', 189)] r_json = api_call(url, headers, parameters) [/code] Второй вызов всегда вызывает ошибку JSONDecodeError из-за начальной последовательности \x8b\x15\x80 и конечной последовательности \x03 [code]b'[{"Label":"2016 Gasolina","Value":"2016-1"},{"Label":"2014 Gasolina","Value":"2014-1"}]' b'\x8b\x15\x80[{"Label":"2011 Gasolina","Value":"2011-1"}]\x03' JSONDecodeError('Expecting value: line 1 column 1 (char 0)') [/code] Ошибка, выполненная в браузере: [img]https://i.sstatic.net/V0n8yhGt.png[/img] Есть идеи? Благодаря комментарию теперь я знаю, что ошибки возникают только при запуске в виртуальной среде Python (venv). Подробнее здесь: [url]https://stackoverflow.com/questions/79818221/python-requests-request-returning-garbage[/url]