回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个API端点,比如说<code>sampleapi.domain.com/api/v1/1</code>,它在本地<code>(127.0.0.1)</code>和在线<code>sampleapi-dev.domain.com</code>的开发中工作得很好,但是当我从进行调用的服务器<code>sampleapi.domain.com</code>调用同一个端点<code>sampleapi.domain.com/api/v1/1</code>时,我得到了</p>
<blockquote>
<p>json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char
0)</p>
</blockquote>
<p>这是不寻常的,因为相同的代码在开发和在线工作。返回的HTTP代码是500而不是200(对于本地测试和开发服务器中的相同API调用返回的代码)</p>
<p>当我改变开始的方式时<code>gunicorn</code></p>
<p>从<code>gunicorn --certfile=crt --keyfile=key --bind 0.0.0.0:8000 a.wsgi</code></p>
<p>到<code>gunicorn --certfile=crt --keyfile=key --bind 0.0.0.0:8000 a.wsgi -w 1 --threads 2</code></p>
<p>这似乎解决了错误,但我不完全确定为什么会这样</p>
<p>是因为单个线程忙于加载API所在的页面,所以无法调用API吗?
如果这不是原因,原因可能是什么</p>
<pre><code>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)
</code></pre>
<p><code>get_api</code></p>
<pre><code>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()
</code></pre>