【问题标题】:Python connect to rest apiPython连接到rest api
【发布时间】:2017-02-18 12:31:48
【问题描述】:

我想用下面的代码连接到一个rest api:

data = requests.get("http://pbx/rest/login").json()
head = {'loginType' : 'Internal','nonce' : data["nonce"], 'secret' : (hashlib.sha1((LOGIN_ID+data['nonce']+PASSWORD).encode('utf-8')).hexdigest())}
data_new = requests.post('http://pbx/rest/login',data=head)
print(data_new)

从 pbx 请求 nonce 工作正常,然后我需要生成登录密码并将其发布到 pbx,答案应该是令牌

但是 print(data_new) jus 显示我并且 print(data_new.json()) 崩溃并出现以下错误:

Traceback (most recent call last):
  File "starface.py", line 14, in <module>
    Connect()
  File "starface.py", line 12, in Connect
    data_new = requests.post(SERVER+"login",data=head).json()
  File "C:\Users\BüroNotebook\AppData\Local\Programs\Python\Python35-32\lib\site
-packages\requests\models.py", line 866, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\BüroNotebook\AppData\Local\Programs\Python\Python35-32\lib\json
\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "C:\Users\BüroNotebook\AppData\Local\Programs\Python\Python35-32\lib\json
\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\BüroNotebook\AppData\Local\Programs\Python\Python35-32\lib\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)

【问题讨论】:

    标签: python json python-3.x rest python-requests


    【解决方案1】:

    看起来你得到一个空白的响应正文,没有什么可以解析的。这是一个获取相同 json 错误的 sn-p:

    >>> import json
    >>> json.loads('')
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
        raise ValueError(errmsg("Expecting value", s, err.value)) from None
    ValueError: Expecting value: line 1 column 1 (char 0)
    

    所以我会做以下事情:

    1. print(d.headers, d.status_code)。您会看到您的 HTTP 响应代码,并且可能会在响应标头中看到一些有用的信息。考虑到这些信息,请查看您的 pbx 服务器的文档以了解它的含义,然后可能会以您构建第二个请求的方式修复某些问题。
    2. 如果您有权访问日志文件,请检查那里发生的情况。如果您没有此权限,请联系拥有权限的人

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 2019-01-05
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多