マクロを使えば、必要な時にいつでも HTTPS サーバにデータを送信できます。 送信するデータとその整理方法を制御できるため、既存のサービスに合わせてデータを簡単に調整できます。
セキュリティ対策:
-
HTTPS クライアントリクエスト機能は、デフォルトでは無効になっています。 システム管理者は、 を On (
xConfiguration HttpClient Mode: On)に設定することにより、この機能を明示的に有効にする必要があります。 -
システム管理者は、 を False (
xConfiguration HttpClient AllowHTTP: False)に設定することで、HTTP の使用を防止できます。 -
システム管理者は、デバイスがデータの送信を許可されているHTTP(S) サーバーのリストを指定することができます。 (xCommand HttpClient Allow Hostname コマンドを参照してください。)
-
同時 HTTP(S) 要求の数は制限されています。
この記事で言及されている設定は、デバイスのウェブインターフェースと API の両方から入手できます。 コマンドは API から利用できます。 ウェブインターフェースへのアクセス方法と API の使用方法については、 詳細設定の記事 をお読みください。
許可されている HTTPS サーバのリスト
システム管理者は、以下のコマンドを使用して、最大 10 個の許可された HTTPS サーバ(ホスト)のリストを設定および管理できます。
-
xCommand HttpClient Allow Hostname Add Expression: <HTTPS サーバのホスト名またはアドレスに一致する正規表現> -
xCommand HttpClient Allow Hostname Clear -
xCommand HttpClient Allow Hostname List -
xCommand HttpClientホスト名の削除を許可するID:<リスト内のエントリのID>
リストにサーバのエントリが含まれている場合、それらのサーバに対してのみ HTTPS リクエストを送信できます。 ただし、リストが空の場合は、任意の HTTPS サーバにリクエストを送信できます。
許可されたサーバーのリストに対するチェックは、データの安全でない(HTTP)転送と安全な(HTTPS)転送の両方を使用するときに実行されます。
証明書検証なしの HTTPS
HTTPS 経由でリクエストを送信する場合、デバイスはデフォルトで HTTPS サーバの証明書を確認します。 HTTPS サーバ証明書が有効でない場合は、エラーメッセージが表示されます。 デバイスはそのサーバーにデータを送信しません。
証明書検証でHTTPSを使用することをお勧めします。 証明書の検証が不可能な場合、システム管理者は を On ( xConfiguration HttpClient AllowInsecureHTTPS: On )に設定できます。 これにより、サーバーの証明書を検証せずに HTTPS を使用することができます。
HTTPS リクエストの送信
HTTPS クライアントリクエスト機能が有効になると、以下のコマンドを使用して HTTPS サーバにリクエストを送信できます。 <method> は、 IP 、 PUT 、 Patch 、 Get 、または Delete のいずれかです。
-
xCommand HttpClient <メソッド> [AllowInsecureHTTPS: <True/False>] [Header: <ヘッダーテキスト>] [ResponseSizeLimit: <最大レスポンスサイズ>] [ResultBody: <None/PlainText/Base64>] [Timeout: <タイムアウト期間>] Url: <リクエストを送信する URL>
ヘッダーフィールドの追加は任意で、最大 20 個まで追加できます。
AllowInsecureHTTPS パラメータは、システム管理者がサーバの証明書を検証せずに HTTPS の使用を許可した場合にのみ有効です。 そうであれば、パラメータが True に設定されている場合、サーバ証明書を検証せずにサーバにデータを送信できます。 パラメータを省略するか、False に設定すると、証明書の検証が失敗した場合にデータが送信されません。
ResposeSizeLimit パラメータは、デバイスがサーバからの応答として受け入れる最大ペイロードサイズ (バイト) です。 応答ペイロードがこの最大サイズを超えると、コマンドはステータスエラーを返します。 エラーメッセージによると、最大ファイルサイズを超えています。 しかし、これはサーバ側には何の影響もありません。サーバはリクエストを正しく受信し、処理しています。
コマンド結果におけるサーバからの HTTP レスポンスの本文のフォーマット方法を決定するには、 ResultBody パラメーターを使用します。 選択肢は 3 つあります。
-
なし: HTTP レスポンスの本文をコマンド結果に含めません。 -
Base64: 結果に含める前に、本文を Base64 エンコードします。 -
PlainText: 結果に本文をプレーンテキストとして含めます。 応答に印刷不可能な文字が含まれている場合、コマンドは「印刷不可能なデータが見つかりました」というメッセージとともにステータスエラーを返します。
タイムアウト期間(秒)を設定するには、 Timeout パラメータを使用します。 この期間内にリクエストが完了しない場合、API はエラーを返します。
コマンドを発行した直後に、ペイロード(データ)を入力してください。 入力した内容はすべて、改行を含めてペイロードの一部となります。 完了したら、改行("\n") と、ピリオドと改行のみを含む別の行(".\n"))で終了します。 これでコマンドが実行され、データがサーバに送信されます。
例
どちらの例でも、メッセージ本文は JSON 形式です。 メッセージを受信するサービスの想定フォーマットに応じて、フォーマットはどのようなものでも構いません。
例 1:HTTP を使用した IoT デバイスの制御 POST
以下は、Philips Hue Bridge に接続されたライトを点灯させるマクロ関数です。
function hue_command(data) { var url = 'http://192.0.2.10/api/'ZXlU4tUtQ23Pjbdyl-kiyCjTs0i5ANDEu1ypJq0-/lights/1/state'; var headers = 'Content-Type: application/json'; var command = '{"on":true}'; xapi.command('HttpClient PUT', { 'Url': url, 'Header': headers }, command); }
コマンドラインで API を使用して同じ操作を行うこともできます。
xcommand HttpClient PUT ヘッダー: "Content-Type: application/json" URL: "http://192.0.2.10/api/'ZXlU4tUtQ23Pjbdyl-kiyCjTs0i5ANDEu1ypJq0-/lights/1/state" {"on":true}。
例 2:HTTP を使用して監視ツールにデータを投稿する POST
xcommand HttpClient POST ヘッダー: "Content-Type: application/json" URL: "https://mymonitoringserver.com/service/devicemonitoring" {"Message":"ユーザがこのシステムの問題を報告する","systemName":"BoardRoom 4th floor","softwareVersion":"ce9.6.0","softwareReleaseDate":"2018-12-13","videoMonitors":"Dual"}。
詳細情報
HTTP クライアントリクエストの使用方法の詳細については、 カスタマイズガイド 。 最新バージョンを選択してください。
Ciscoサポート(TAC)は、マクロを含むサードパーティコードのデバッグに対応していません。 チェックしてください https://roomos.cisco.com マクロやサードパーティ製コードに関するサポートが必要な場合は、ご連絡ください。