AzureでHttpClientクラスを使用しようとしています

2020-06-30 python azure-functions

特定のURLが使用可能かどうかを確認する単純なAzure関数を作成しようとしています(これは単なる概念実証です)。私の問題は、クライアントクラスを取得するためにどのライブラリをインポートする必要があるのか​​わからないことです。 Azureドキュメントは明確ではなく、すべての例はC#または.NETです

import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    target = req.params.get('target')
    if not target:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            target = req_body.get('target')

    if target:
        try:
            MyClient = HttpClient()
            response = MyClient.GetAsync(f"http://{target}")
        except:
                return func.HttpResponse("Error", status_code = 500)
        if response.StatusCode == 200 or response.StatusCode == 302:
            return func.HttpResponse("OK")
        else:
            return func.HttpResponse("Bad", status_code = 503)
    else:
        return func.HttpResponse(
             "No target specified",
             status_code=400
        )

Requirements.txt:

azure-functions==1.2.1
altgraph==0.17
future==0.18.2
pefile==2019.4.18
PyInstaller==3.6
pywin32-ctypes==0.2.0
PyYAML==5.3.1
requests==2.24.0

Answers

この要件については、VSコードの「ターミナル」ウィンドウで以下のコマンドを実行することにより、Python関数にrequestsをインストールできます。

pip install requests

そしてそれをインポートし、以下のように使用します( responsestatus_codeを確認するstatus_codeです):

ここに画像の説明を入力してください

更新:

いくつかのテストによると、私はあなたの問題を再現しました。 Azureにrequestsモジュールの成功をインストールしなかったようです。ローカルの関数にインストールするだけです。以下の手順を参照してください。

1. requestsモジュールをローカルにインストールし、関数の成功をローカルで実行していることを前提としています(まだ問題がある場合は、お知らせください)。次に、VSコードの「ターミナル」ウィンドウで以下のコマンドを実行して、「requirements.txt」を生成します。

pip freeze > requirements.txt

ここに画像の説明を入力してください

「requirements.txt」はモジュールのインストールに使用されます。関数をazureにデプロイすると、「requirements.txt」の内容に従ってazureがモジュールをインストールします。上記のコマンドを実行して「requirements.txt」を生成すると、次のように表示されます。 ここに画像の説明を入力してください

関数の理由により、「requirements.txt」に「リクエスト」が見つからない500エラー(「このページは機能していません」)が表示されました。

2.次に、[ターミナル]ウィンドウでコマンドを実行して、ローカルからAzureに関数をデプロイします。

func azure functionapp publish <functionAppName> --build remote

<functionAppName>は、azureポータルで作成した関数app(python)の名前です。

3.その後、azureポータルにアクセスして関数をテストします。正常に機能します。

Related