Как реализовать вызов REST API для функций Azure?Python

Программы на Python
Ответить
Anonymous
 Как реализовать вызов REST API для функций Azure?

Сообщение Anonymous »

Я пытаюсь создать функцию Azure, которая запускается каждый раз, когда список пользователей обновляется в стороннем API REST. Вот как мой код выглядит сам по себе и работает должным образом (возвращает результат, который я ищу):

Код: Выделить всё

import base64
import requests
from urllib.parse import urlencode
import os

username = os.environ["username"]
password = os.environ["password"]

encoded_username = urlencode({"username": username}).split('=')[1]
encoded_password = urlencode({"password": password}).split('=')[1]

# Combine username and password into a single string
url_cred = f"{encoded_username}:{encoded_password}"

# Encode the combined string in Base64
encoded_b64 = base64.b64encode(url_cred.encode('utf-8')).decode('utf-8')

# Set up headers for the POST request
headers = {
"authorization": f"Basic {encoded_b64}"
}

# Set up body for the POST request
body = {
"grant_type": "client_credentials"
}

# Obtain access token with GET request
response = requests.post("https://examplewebsite.com/oauth2/token", headers=headers, data=body)
token = response.json().get('access_token')

# Set up headers for the GET request with the access token
auth_header = {
"authorization": f"Bearer {token}"
}

# Make the GET request to retrieve users
response = requests.get("https://examplewebsite.com", headers=auth_header)
# ! This is the GET request I want to use to trigger the function !
results = response.json()

username_results = []
for data in results:
for elem in results["usersResult"]:
username_results.append(elem['userName'])

for name in username_results:
print(name)
Вот моя попытка интегрировать код в функцию Azure:

Код: Выделить всё

import azure.functions as func
import logging
import json
import requests
import base64
from urllib.parse import urlencode
import os

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

username = os.environ["username"]
password = os.environ["password"]

@app.route(route="api_call")
def api_call(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

# URL encode username and password
encoded_username = urlencode({"username": username}).split("=")[1]
encoded_password = urlencode({"password": password}).split("=")[1]

url_cred = f"{encoded_username}:{encoded_password}"

# Encode in Base64
encoded_64 = base64.b64encode(url_cred.encode("utf-8")).decode("utf-8")

# Headers for POST request
headers = {
"authorization": f"Basic {encoded_64}"
}

# Body for POST request
body = {
"grant_type": "client_credentials"
}

# Obtain access token with GET request
response = requests.post("https://examplewebsite.com/oauth2/token", headers=headers, data=body)
token = response.json().get("access_token")

# Headers for GET request with access token
auth_header = {
"authorization": f"Bearer {token}"
}

# Make GET request to retrieve users
res = requests.get("https://examplewebsite.com", headers=auth_header)

# ! The GET request I want to use to trigger the function !
results = req.get_json(res)

# Filter results and return only usernames
username_results = []
for data in results:
for elem in results["usersResult"]:
username_results.append(elem["userName"])

for name in username_results:
return func.HttpResponse(json.dumps(name))

С помощью этого кода я получаю сообщение об ошибке System.Private.CoreLib: Результат: Исключение сбоя: TypeError: HttpRequest.get_json() принимает 1 позиционный аргумент, но задано 2< /p>
Как правильно подключить HTTP-триггер?
Я прочитал документацию по HTTP-триггерам и привязкам функций Azure, но не нашел подходящих примеров. помочь.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»