錯誤417:在LabVIEW中使用HTTP方法時連結失敗

更新 Apr 16, 2021

產品資訊

軟體

  • LabVIEW

問題敘述

我正在嘗試使用HTTP方式與伺服器通訊,但是HTTP VI返回Error 417: Expectation Failed 。是什麼原因導致此錯誤,我該如何解決?

解決方案

HTTP / 1.1協議定義了100 (繼續) 狀態,它允許客戶端在發送訊息正文之前檢查服務器是否願意接受請求。該過程如下:
  1. 客戶端希望向伺服器發送請求訊息。
  2. 客戶端發送一個包含Expect: 100-continue的請求標頭。
  3. 伺服器發回100 (Continue)417 (Expectation Failed)狀態。
  • 100 (Continue)表示服務器接受請求,客戶端可以繼續發送請求正文。
  • 417 (Expectation Failed)表示伺服器拒絕該請求。

HTTP Client Palette使用某些HTTP方法時,如訊息長度為1024個字元或更長,LabVIEW將自動在請求頭中添加“ 100 - continue期望值”。如果伺服器始終以417 (Expectation Failed)響應,或者不知道如何正確響應417 (Expectation Failed)則可能導致問題。

由於HTTP客戶端功能不提供禁用100 - continue的選項處理更長的訊息(1024個以上的字元),因此解決方案是從頭開始創建一個HTTP請求標頭,將其排除在外。 HTTP方法的標准定義請參閲HTTP (HyperText Transfer Protocol)

下面的程式碼片段演示了一個例子,該例子使用基本功能和TCP Palette中的功能來實現HTTP POST方法。為HTTP請求編寫字符串時,請將字符串顯示樣式設置為反斜杠(\)程式碼。這使您可以校對不可顯示的字符,亦為必要的正確終止命令。

從字符串常數或字符串控件:
  • 右鍵單擊»'\' Codes Display,
  • 右鍵單擊»屬性»Display Style: Backslash (\) Codes 
請注意:該圖像是LabVIEW snippet,其中包含可在project中重複使用的LabVIEW程式碼。要使用snippet,請右鍵單擊圖像,將其保存到電腦,然後將圖檔拖到LabVIEW block diagram上。
請注意:該圖像是LabVIEW snippet,其中包含可在project中重複使用的LabVIEW程式碼。要使用snippet,請右鍵單擊圖像,將其保存到電腦,然後將圖檔拖到LabVIEW block diagram上。