【问题标题】:How to filter data in requests if that data is in a list?如果数据在列表中,如何过滤请求中的数据?
【发布时间】:2021-12-12 15:28:39
【问题描述】:

我有一个名为 sampleid_list 的 sampleId 列表,现在我想做一个请求,并且我只想在该 SampleId 出现在 sampleid_list 中时获取 SampleId

这是我的代码:

import requests

sampleid_list = [592785, 592787, 592789, 592790, 592791, 592795, 592796]

headers = {'Authorization': 'Bearer ' + token}
proxies = {'https': 'proxy.services.dekra.com:8080'}
url1 = 'https://**-**-***.***.com/odata/Results'

params_1 = (
    ('$filter','SampleId in ', sampleid_list),
    ('$select', 'ResultId, CompletedOn, EnteredValue, EnteredOn, TextValue\n'),
    ('$count', 'true'),
    ('$expand', 'Test($expand=Sample($select=SampleId)), Test($expand=TestType($select=Name)), Test($select=SpecificationStatus), ResultType($select=Name), Unit($select=Name)\n'),
)

response_1 = requests.get(url1, headers=headers, proxies=proxies, params=params_1)
r1 = response_1.json()
print(r1)

现在比较困难的是SampleId 不在/Results 的基本网址中,而是从/Sample 扩展而来

我目前的输出:

Traceback (most recent call last):
  File "c:/data/GORGE/Desktop/VSprojects/EnergyZero/EnergyZero_API.py", line 156, in <module>
    response_1 = requests.get(url1, headers=headers, proxies=proxies, params=params_1)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 459, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 314, in prepare
    self.prepare_url(url, params)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 432, in prepare_url
    enc_params = self._encode_params(params)
  File "C:\ProgramData\Anaconda3\lib\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)

【问题讨论】:

  • 请分享完整的错误详情。
  • @balderman 是的,完成了

标签: python list python-requests postman


【解决方案1】:

你的错误:

params 应该是一个 dict 或一个 list 的元组。每个元组应包含 2 个元素 (key,val),但 params_1 是元组的 tuple,并且您有超过 2 个元素。

错误演示(第三次请求将抛出您在代码中得到的异常)

import requests

url = 'https://w3schools.com/python/demopage.php'

x = requests.get(url, params = {"model": "Mustang"})
print(x.status_code)

y = requests.get(url, params = [("model", "Mustang")])
print(y.status_code)

bug = requests.get(url, params = (("model", "Mustang","bug")))

print(bug)

【讨论】:

  • 如果我将过滤器行注释掉并运行它可以工作的代码,但这完全不是我想要的,因为我希望包含过滤器参数
  • 正如我所写 - 你的元组必须只有 2 个元素 - 键和值。
  • 好的,我明白了,所以我怎样才能达到我的目标(过滤我列表中可用的 sampleId)
  • 因为我不知道'https://**-**-***.***.com/odata/Results' 期望得到什么,所以我很难说。
  • 它是一个私有 API,所以我无法提供该信息,但它与过滤器功能有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多