Как мне заставить мой JSON декодер работать правильно? - PullRequest
0 голосов
/ 02 августа 2020

Я работал над тестированием API и пробовал все, но он не выводил файл JSON в строку. Мне было интересно, был ли это веб-сайт, с которого я тестировал запросы API, поскольку я продолжал получать ошибку 406. Я даже попытался взять код из Интернета, который показывает, как это сделать, но он все равно не печатает и выдает ошибку, указанную ниже. Здесь я привожу код, который я использовал, и ответ, который мне дала консоль Pycharm.

import json
import requests

res = requests.get("http://dummy.restapiexample.com/api/v1/employees")
data = json.loads(res.text)
data = json.dumps(data)
print(data)
print(type(data))

Traceback (most recent call last):
  File "C:/Users/johnc/PycharmProjects/API_testing/api_testing.py", line 8, in <module>
    data = json.loads(res.text)
  File "D:\Program Files (x86)\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "D:\Program Files (x86)\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "D:\Program Files (x86)\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)






                     

Ответы [ 3 ]

0 голосов
/ 02 августа 2020

По умолчанию Python User-Agent, вероятно, был заблокирован хостинговой компанией.

Вы можете настроить любую строку или искать строку реального устройства.

res = requests.get("http://dummy.restapiexample.com/api/v1/employees", headers={"User-Agent": "XY"})
0 голосов
/ 02 августа 2020

REST API сильно различаются по типам запросов, которые они будут принимать. 406 означает, что вы предоставили недостаточно информации серверу для форматирования ответа. Вы должны включить пользовательский агент, потому что API часто настраиваются для устранения недостатков различных http-клиентов и, в частности, указывается формат вывода, который вы хотите. Добавление приемлемых кодировок позволяет API сжимать данные. Кодировка - хорошая идея. Вы даже можете добавить языковой запрос, но большинству API на это наплевать.

import json
import requests

headers={"Accept":"application/json",
    "User-agent": "Mozilla/5.0",
    "Accept-Charset":"utf-8", 
    "Accept-Encoding":"gzip, deflate", 
    "Accept-Language":"en-US"} # or your favorite language
res = requests.get("http://dummy.restapiexample.com/api/v1/employees", headers=headers)
data = json.loads(res.text)
data = json.dumps(data)
print(data)
print(type(data))

Особенность REST API в том, что они могут игнорировать часть или часть заголовка и возвращать то, что им нравится. В любом случае, неплохо было бы правильно сформировать запрос.

0 голосов
/ 02 августа 2020

Это вы, ваше соединение или прокси. У меня все работает нормально.

>>> import requests
>>> res = requests.get("http://dummy.restapiexample.com/api/v1/employees")
>>> res.raise_for_status()  # would raise if status != 200
>>> print(res.json())  # `res.json()` is the canonical way to extract JSON from Requests
{'status': 'success', 'data': [{'id': '1', 'employee_name': 'Tiger Nixon', 'employee_salary': '320800', ...
...