首页 > 解决方案 > 使用 Python 请求获取令牌

问题描述

为了登录我的一台 Reoline 相机,我需要一个令牌,我可以使用 CURL 检索它:

curl -d '[{"cmd": "Login", "action": 0, "param": {"User": {"userName": "admin", "password": "XXX"}}}]' 10.0.1.241/cgi-bin/api.cgi?cmd=Login&token=null

送货:

[{
  "cmd" : "Login",
  "code" : 0,
  "value" : {
     "Token" : {
        "leaseTime" : 3599,
        "name" : "b5ada7618176225"
     }
  }}]

但我想在 Python 中执行这个令牌检索并失败:

    import requests
    url_WZ = 'http://10.0.1.241/cgi-bin/api.cgi?cmd=Login'
    payload = [{"cmd": "Login", "action": 0, "param": {"User": {"userName": "admin", "password": "XXX"}}}]

    r = requests.post(url=url_WZ, params=payload)

我收到以下错误消息:

    Traceback (most recent call last):
      File "/Users/hubobel/Documents/Python/HubobelsPython/Reolink.py", line 8, in <module>
        r = requests.post(url=url_WZ, params=payload)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/api.py", line 112, in post
        return request('post', url, data=data, json=json, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/api.py", line 58, in request
        return session.request(method=method, url=url, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/sessions.py", line 499, in request
        prep = self.prepare_request(req)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/sessions.py", line 431, in prepare_request
        hooks=merge_hooks(request.hooks, self.hooks),
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/models.py", line 303, in prepare
        self.prepare_url(url, params)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/models.py", line 421, in prepare_url
        enc_params = self._encode_params(params)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/requests/models.py", line 97, in _encode_params
        for k, vs in to_key_val_list(data):
    ValueError: too many values to unpack (expected 2)

Process finished with exit code 1

如果我能为此找到帮助,那就太好了。

许多问候

标签: pythonpython-3.xpython-requests

解决方案


这是我的工作解决方案:

import requests

url_WZ = 'http://10.0.1.241/cgi-bin/api.cgi?cmd=Login'
payload = '[{"cmd": "Login", "action": 0, "param": {"User": {"userName": "admin", "password": "XXX"}}}]'
r = requests.post(url=url_WZ, data=payload)
data = r.json()
print(data)

推荐阅读