エラー417:LabVIEWでHTTPメソッドを使用すると失敗する

更新しました May 14, 2021

使用製品

ソフトウェア

  • LabVIEW

問題

HTTPメソッドを使用してサーバーと通信しようとしていますが、HTTP クライアントVIで Error 417: Expectation Failed が発生します。このエラーの原因とその解決方法を教えてください。

解決策

HTTP / 1.1プロトコルでは、100(Continue)ステータスを定義しています。これにより、クライアントは、メッセージ本文を送信する前に、サーバーが要求の受け入れの可否を確認できます。プロセスは次のようになります。
  1. クライアントがサーバーに要求メッセージを送信したいと考えています。
  2. クライアントは、 Expect: 100-continueを含むリクエストヘッダーを送信します。
  3. サーバーは、 100 (Continue)または417 (Expectation Failed)ステータスを返します。
  • 100 (Continue)は、サーバーが要求を受け入れ、クライアントが要求本文の送信を続行できることを意味します。
  • 417 (Expectation Failed)は、サーバーが要求を拒否することを意味します。

HTTPクライアントパレットで特定のHTTPメソッドを使用する場合、メッセージが1024文字以上の場合、リクエストヘッダーに100 - continueをLabVIEWは自動的に追加します。これは、サーバーが常に417 (Expectation Failed)と応答する場合、または適切な応答を判断でき兼ねる場合に問題を引き起こす可能性があります。

長いメッセージ(1024文字以上)を送信する際、HTTPクライアント関数には100 - continueを無効にするオプションがないため、回避策は、HTTP要求ヘッダーを一から作成する方法となります。 HTTPメソッドは、 W3CHTTPプロトコルの説明 で定義されています。

以下のスニペットは、基本的な関数とTCPパレットの関数を使用してHTTP POSTメソッドを実装する例を示しています。 HTTPリクエストの文字列を作成する際、文字列の表示スタイルを'\'(円)コード表示に設定します。これにより、コマンドを適切に終了するために必要な表示不可能な文字を確認できます。

文字列定数または文字列制御器から:
  • 右クリック» '\'(円)コード表示、または
  • 右クリック»プロパティ»表示スタイル:'\'(円)コード

注:このイメージはLabVIEWスニペットであり、プロジェクトで再利用できるLabVIEWコードが含まれています。スニペットを使用するには、画像を右クリックしてコンピュータに保存し、ファイルをLabVIEWダイアグラムにドラッグします。

注:このイメージはLabVIEWスニペットであり、プロジェクトで再利用できるLabVIEWコードが含まれています。スニペットを使用するには、画像を右クリックしてコンピュータに保存し、ファイルをLabVIEWダイアグラムにドラッグします。