【问题标题】:How to request an array to http get parameters with a for?如何用for请求一个数组来http获取参数?
【发布时间】:2020-04-24 23:09:38
【问题描述】:

以下是我对您的看法的代码:

import warnings
import contextlib
import json
import requests
from urllib3.exceptions import InsecureRequestWarning


old_merge_environment_settings = requests.Session.merge_environment_settings

@contextlib.contextmanager
def no_ssl_verification():
    opened_adapters = set()

    def merge_environment_settings(self, url, proxies, stream, verify, cert):
        # Verification happens only once per connection so we need to close
        # all the opened adapters once we're done. Otherwise, the effects of
        # verify=False persist beyond the end of this context manager.
        opened_adapters.add(self.get_adapter(url))

        settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert)
        settings['verify'] = False

        return settings

    requests.Session.merge_environment_settings = merge_environment_settings

    try:
        with warnings.catch_warnings():
            warnings.simplefilter('ignore', InsecureRequestWarning)
            yield
    finally:
        requests.Session.merge_environment_settings = old_merge_environment_settings

        for adapter in opened_adapters:
            try:
                adapter.close()
            except:
                pass

with no_ssl_verification():
    ##350014,166545
    payload = {'key1': '350014', 'key2': '166545'}
   resp = requests.get('https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/params', params=payload, verify=False, headers={'Authorization': 'Token +++++private++++', 'content-type': 'application/json'})
print(resp.status_code)
    print(resp.status_code)
    j = resp.json()
    ##print(j)
    jprint(resp.json())

我怎样才能做一段时间或一次发送个人身份证号码列表并将 JSON 结果发送给女巫? 我尝试粘贴一些参数,但它不起作用,产生一些错误...

我收到以下错误:

JSONDecodeError:预期值:第 1 行第 1 列(字符 0)

如果我说:

 resp = requests.get('https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/350014',

只需一个数字,它就可以工作。 这里跟随json:

200
[
    {
        "DT_INI_VIG_invalidez": null,
        "DT_fim_VIG_invalidez": null,
        "MODULO": "APOIO",
        "chapa": 350014,
    }
]

【问题讨论】:

  • 为什么不显示完整的错误?我们无法运行代码来查看错误。而且我们无法读懂您的想法-因此您的问题毫无用处。
  • 现在关于for item in [350014,166545]: payload = {"key": item}
  • 如果您收到 JSON 错误,那么您应该使用 print(resp.text) 来查看您得到的结果 - 可能您收到 HTML 并警告您使用了错误的命令。
  • 您必须使用/company/1/badge/" + str(params) 而不是/company/1/badge/params"/company/1/badge/{}".format(params) 或最新的Python f-string f"/company/1/badge/{params}"。您当前的网址发送单词 "params" 而不是数字
  • 请参阅我的回答中的all_results.append(resp.json())

标签: python arrays http post get


【解决方案1】:

您必须手动将数字添加到 url

"https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/" + str(params) 

"https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/{}".format(params) 

或在 Python 3.6+ 中使用 f-string

f"https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/{params}"

使用params=params 不会以这种方式将数字添加到url,而是?key1=350014&key2=166545

您可以使用

查看请求使用的 url
    print(resp.request.url)

现在你可以循环运行了

all_results = []

for number in [350014, 166545]:
    url = 'https://rhconnect.marcopolo.com.br/api/workers/data_employee/company/1/badge/{}'.format(number)
    resp = requests.get(url, verify=False, headers={'Authorization': 'Token +++++private++++', 'content-type': 'application/json'})

    #print(resp.request.url)
    print(resp.status_code)
    print(resp.json())

    # keep result on list
    all_results.append(resp.json())

顺便说一句:如果您遇到错误,那么您应该检查您得到了什么

print(resp.text)

也许你会得到带有信息或警告的 HTML

【讨论】:

  • 呜呜呜!!你太棒了!!!我真的很感谢你的努力!!
  • 我只是收到一些警告,但完全没问题。 :InsecureRequestWarning:未验证的 InsecureRequestWarning)
  • 删除警告信息 >>> import urllib3 >>> urllib3.disable_warnings()
猜你喜欢
  • 2017-04-21
  • 2019-08-05
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多