首页 > 解决方案 > 如何将多个 url 合并到一个 get 函数 python

问题描述

我有下面的 Python 函数,它获取查询 url 的警报,这正在工作。

但是,我必须向url我无法弄清楚的部分提出更多查询。

以下是工作功能:

BASE_URL = "https://synergy.hpe.example.com/rest/"

def get_alerts(session, session_id):
    try:
        return session.get(
            url=f"{BASE_URL}/resource-alerts"
            headers={
                "accept": "application/json",
                "content-type": "text/csv",
                "x-api-version": "2",
                "auth": session_id,
            },
            verify=False,
            stream=True
        )

我需要遍历多个警报查询以及 BASE_URL:

 "/resource-alerts?count=500&start=501"
 "/resource-alerts?count=500&start=1001"
 "/resource-alerts?count=500&start=15001",

                

我用for循环尝试过的东西:

在执行 for 循环时,它可以工作,但看起来像重写了 return 函数,因此只返回单个 get alert 查询的输出。

qr = [ 'resource-alerts', 'resource-alerts?count=500&start=501', 'resource-alerts?count=500&start=1001', 'resource-alerts?count=500&start=1501' ]

def get_resource_alerts_response(session, session_id):
    try:
        for res in qr:
            return session.get(
                url=f"{BASE_URL}{res}",
                #url=f"{BASE_URL}/resource-alerts?count=-1",
                headers={
                    "accept": "application/json",
                    "content-type": "text/csv",
                    "x-api-version": "2",
                    "auth": session_id,
                },
                verify=False,
                stream=True
                )
    except requests.exceptions.RequestException as req_exception:
        raise ResourceAlertsRetrievalFailure(
            f"Could not fetch resource alerts: {req_exception}"
        )

标签: pythonpython-3.x

解决方案


有点假,因为您提交的代码不允许我重现该问题:

ResourceAlertsRetrievalFailure = Exception
class FakeGetRequest:
    def get(self, *args, **kwargs):
        print("GET ", tuple(args), dict(kwargs))
session_id = "..."
session = FakeGetRequest()

我可以让你的代码工作:

import requests

BASE_URL = "https://synergy.hpe.example.com/rest/"
qr = ['resource-alerts',
      'resource-alerts?count=500&start=501',
      'resource-alerts?count=500&start=1001',
      'resource-alerts?count=500&start=1501']


def get_resource_alerts_response(session, session_id):
    try:
        return session.get(
            url=f"{BASE_URL}{res}",
            headers={
                "accept": "application/json",
                "content-type": "text/csv",
                "x-api-version": "2",
                "auth": session_id,
            },
            verify=False,
            stream=True
            )
    except requests.exceptions.RequestException as req_exception:
        raise ResourceAlertsRetrievalFailure(
            f"Could not fetch resource alerts: {req_exception}"
        )

for res in qr:
    get_resource_alerts_response(session, session_id)

推荐阅读