2015-01-06 142 views
0

我有兩個用Perl編寫的CGI腳本,我想在兩者之間實現以下通信順序。腳本A向腳本B發送POST請求,然後它應該等待B通過查詢數據庫來執行某種類型的驗證,然後B將成功或失敗返回給A以及自定義代碼,例如, 1122特定於我的應用程序,並在適當時繼續執行。這是使用LWP框架可以實現的嗎?CGI腳本通信

我試圖從A發送POST請求到B,然後等待在腳本中使用

while(<STDIN>) { 
    $response .= $_; 
} 

一個,直到接收應答返回從B(另一POST),但是這並不能作爲簡單的工作忽略SDTIN循環並繼續。

不用說,我對CGI是完全陌生的,我發現的大多數答案都涉及到一個簡單的POST或GET請求到CGI腳本,但不是雙向通信,其中一端必須等待另一端響應驗證已經發生。

回答

3

您不需要做任何事情來讓腳本等待響應。 LWP默認是同步的。

只是提出請求,然後像往常一樣閱讀$res->content;(非STDIN!)(有關擴展示例,請參閱the documentation)。

如果您正在使用CGI,則不應該直接觸及STDIN。理想情況下,您將使用Plack/PSGI,因此您將通過Plack API(或構建於其上的框架)訪問所有輸入。如果您正在使用遺留代碼,那麼您可能會使用CGI.pm,它提供了自己的API來讀取輸入(通過param)。


不用說,我是完全新的,以CGI和大多數的答案,我發現涉及一個簡單的POST或GET請求到CGI腳本,但不是雙向通信,其中一端有等待其他人在驗證發生後作出迴應。

發出一個簡單的POST或GET請求。

  1. 瀏覽器發出請求,以A.cgi
  2. A.cgi使得請求B.cgi
  3. B.cgi輸出響應
  4. A.cgi讀取響應和不一些與它
  5. A.cgi輸出
  6. 瀏覽器接收到響應那個迴應
+0

但是,B應該如何執行數據庫查找並發現A的POST請求是有效的?如果我在B收到POST並開始查找數據庫進行驗證時正在描述的步驟A已經收到200 OK(成功)...... – user1845360

+1

但是,您可以根據需要查看B的響應。這些天大部分的web服務都會輸出一個JSON文檔。 – Quentin

+3

默認情況下,LWP不是異步的,執行我描述的步驟將不會導致A在從B讀取響應之前返回響應。它只會在A完成運行之前做一些事情明確發送響應。 – Quentin