2009-11-18 192 views
2

我是http和Apache的HttpComponents API的新手。使用httpcomponents處理流式響應時的多個http請求

我需要使用Apache的HttpComponents處理http請求的流式響應,同時可能會在該連接上發出額外的http請求。例如,一個POST請求最初被製作爲http://mystreams.net,隨後會有其他請求,而我必須監聽並處理流式響應。我需要保持與我所做的相同的初始連接。

我該怎麼做?我能夠創建一個簡單的HttpClient並執行一個簡單的HttpPost請求,然後處理非流式傳輸的響應實體,但是如何繼續傳輸數據並同時向相同的地址使用相同的上下文(即cookies)?

回答

1

您的流式數據是否作爲單個HTTP響應返回?如果是這樣,您將無法在該連接上收到其他回覆,直到完成。但是,您可以從該響應中取回cookie(同時它仍將流式傳輸給您),並使用它們在另一個連接上發出其他請求。

+0

>您的流式數據是否作爲單個HTTP響應返回? 是的。由於這是所有套接字,我認爲對新請求的響應可能會返回到已偵聽的現有套接字上。 – andrewz 2009-11-18 16:37:37

+0

可以在套接字上發送新的請求,但是根據HTTP規範,在事先響應完成之前,您將無法獲得響應。 – 2009-11-18 23:33:04

+0

這很好。但是,我*可以*在第一個套接字上獲得響應?我如何在HttpComponents中執行此操作? – andrewz 2009-11-19 10:04:46

0
  • HttpEntity entity = httpclient.execute(httpget).getEntity();
  • InputStream is = entity.getContent()
  • 調用流時,使用一個新的線程,並在主線程中進行後續請求(或更好,在單獨的線程來達到)

而且檢查here

+0

我在HttpComponents的類索引中看不到PostMethod類。 – andrewz 2009-11-18 16:40:06

+0

對不起,這是舊版本 - 檢查我的更新 – Bozho 2009-11-18 17:16:47

+0

那麼你是否在說,如果我堅持從'entity.getContent()'的第一個調用返回的'InputStream',我將能夠接收響應從該流中的第二次呼叫? – andrewz 2009-11-19 10:17:05