为什么将参数赋予url却又分别赋予参数会出错?

时间:2020-06-08 03:24:08

标签: python rest python-requests

我正在使用python请求模块,这两种方式导致不同的结果。

将参数赋予网址:

url = 'http://my_url?m=getMember&mail=abc@de.com'
requests.get(url=url).json()

分别提供参数:

url = 'http://my_url'
data = {'m': 'getMember', 'mail':'abc@de.com'}
requests.get(url = url, data = data).json() #also tried 'data = json.dumps(data)'

第一种方法给出正确的结果。

但是第二种方式会出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home1/irteam/.local/lib/python3.6/site-packages/requests/models.py", line 898, 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)

两者的响应码均为200。

>>> r = requests.post(url = url, data = json.dumps(data))
>>> r
<Response [200]>

>>> r = requests.post(url = url, data = data)
>>> r
<Response [200]>

当我输入r.text时,

>>> r.text
''

两者之间有什么区别?

谢谢:)

1 个答案:

答案 0 :(得分:0)

通过传递data参数,您正在发送带有get请求的有效负载。但不设置参数。 对于设置params,还有另一个参数。这样就可以了:

requests.get(url = url, params = data).json()

希望这会有所帮助。

相关问题