我有一个API端点,比如说sampleapi.domain.com/api/v1/1
,它在本地(127.0.0.1)
和在线sampleapi-dev.domain.com
的开发中工作得很好,但是当我从进行调用的服务器sampleapi.domain.com
调用同一个端点sampleapi.domain.com/api/v1/1
时,我得到了
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这是不寻常的,因为相同的代码在开发和在线工作。返回的HTTP代码是500而不是200(对于本地测试和开发服务器中的相同API调用返回的代码)
当我改变开始的方式时gunicorn
从gunicorn --certfile=crt --keyfile=key --bind 0.0.0.0:8000 a.wsgi
到gunicorn --certfile=crt --keyfile=key --bind 0.0.0.0:8000 a.wsgi -w 1 --threads 2
这似乎解决了错误,但我不完全确定为什么会这样
是因为单个线程忙于加载API所在的页面,所以无法调用API吗? 如果这不是原因,原因可能是什么
File "/path/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/path/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/path/venv/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/path/venv/lib/python3.6/site-packages/django/views/decorators/http.py", line 40, in inner
return func(request, *args, **kwargs)
File "/path/png/script.py", line 128, in get_api
return response.json()
File "/path/venv/lib/python3.6/site-packages/requests/models.py", line 910, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib64/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
get_api
def get_api():
url = 'https://sampleapi.domain.com/api/v1/1'
params = {'Authorization': 'Token ' + os.environ.get("token")}
try:
response = requests.get(url, headers=params)
except requests.exceptions.RequestException:
return "Could not grab api text."
return response.json()
试着使用它
好像是什么
response = requests.get(url, headers=params)
有时返回,不是一个
json
如果您在调试时遇到困难,并且此问题仅在某些环境中发生,在这些环境中,您无法依赖调试器,并且依赖于第三方响应,那么只需在那里添加日志即可
如您所述,如果是500,并且返回一个通用服务器错误,您将无法从客户端调试该问题,因为它没有指向任何潜在的解决方案
如果您可以看到Django应用程序日志,只需查看它返回的内容即可。如果看不到任何错误,请添加
sentry
。如果您不能这样做,请询问服务器的控制者它可能是
ALLOWED_HOSTS
或cors相关问题 更多 >
编程相关推荐