この記事では、Microsoft Graph 要求を行うときに Python スクリプトが Web クローラーとして検出される可能性がある問題の解決策について説明します。
症状
Microsoft Graph 要求を行う Python スクリプトは、ゲートウェイによって Web クローラーとして検出されることがあります。 Python スクリプトでプール マネージャーを使用する場合、要求をブロックすると、次のエラー メッセージが返されます。
{'error': {'code': 'UnknownError', 'message': '\r\n403 Forbidden\r\n\r\n
403 Forbidden
\r\n
Microsoft-Azure-Application-Gateway/v2
\r\n\r\n\r\n', 'innerError': {'date': '{UTC Date/Time}', 'request-id': '{guid}', 'client-request-id': '{guid}'}}}
原因
この問題は、一部の Python スクリプトが、想定されるパターンに準拠する方法で要求を構造化していない可能性があるために発生します。 その結果、ゲートウェイは、Web クローラーからの要求を誤って識別します。
解決策
この問題を解決するには、 Microsoft Graph SDK for Python を使用します。 これを使用しない場合は、要求を送信するために Python の Session
オブジェクトを使用して SDK で処理する方法と同様に、要求を構造化します。
要求を手動で構造化する方法の例を次に示します。
from requests import Request, Session
def example_request(url):
http = Session()
req = Request('GET', url, headers=h)
prepped = req.prepare()
resp = http.send(prepped)
return resp.json()
注
- HTTP 要求ヘッダーの
User-Agent
文字列は、一般的なトラフィックとは区別して、アプリケーションまたはスクリプトに固有である必要があります。 -
Accept: application/json
などの追加のヘッダーを含めると、要求の意図を明確にするのに役立ちます。 - クローラー トラフィックとして誤って識別されると、Microsoft のバックエンド システムによる調整やその他の自動化された軽減策が発生する可能性があります。 クライアントを適切に識別すると、これらの問題を回避するのに役立ちます。
別の HTTP クライアントを使用する場合は、同様のヘッダーが適切に設定されていることを確認します。 要求ヘッダーのカスタマイズについては、HTTP クライアントのドキュメントを参照してください。
詳細情報
Microsoft Graph を使用する場合のベスト プラクティスの詳細については、次の記事を参照してください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。