Как запросить массив в http получить параметры с for? - PullRequest
0 голосов
/ 07 января 2020

Ниже приведен мой код:

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,
    }
]

1 Ответ

1 голос
/ 07 января 2020

Вы должны добавить номер к 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) 

или использовать f-строку в Python 3.6 +

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)

Теперь вы можете запустить в l oop

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 с информацией или предупреждением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...