2010-02-22 24 views
1

我正在編寫一個python(2.6)接口到一個web服務。我需要使得經由HTTP進行通信:Python:按順序發送異步http請求,並自動處理cookie?

  • 餅乾自動處理,
  • 這些要求異步
  • 順序,其中請求被髮送尊重(順序其中收到對這些請求的回覆無關緊要)。

我已經試過什麼可以從內置的圖書館很容易得出,面臨不同的問題:

  • 使用httpliburllib2,該請求是同步的,除非我用thread,在這種情況下,爲了不保證被尊重,
  • 使用asyncore,沒有庫能夠自動處理由Web服務發送的cookie。

經過一番谷歌搜索後,似乎有很多python腳本或庫的例子與3條標準中的2條匹配,但不是其中的3條。我正在考慮通過cookielib來源閱讀,並根據我的需要調整到asyncore(或僅適用於專用方式的應用程序),但似乎並不存在這樣的東西,因爲我猜我不是唯一感興趣的人。如果有人知道關於這個問題的指針,將不勝感激。

謝謝。

編輯澄清:

我在做什麼是我的接口IRC客戶端與網絡聊天的本地代理。它創建一個偵聽IRC連接的套接字,然後在收到一個套接字時,它通過http登錄網絡聊天。我無法訪問網絡聊天的行爲,並且它使用cookies作爲會話ID。當客戶端向我的python代理髮送多個IRC請求時,我必須通過http和cookie將它們轉發到網聊的服務器。我也希望異步執行此操作(我不希望在發送下一個請求之前等待http響應),而現在發生的情況是發送http請求的順序不是IRC的順序收到命令。

我希望這能夠澄清這個問題,當然如果沒有的話我會詳細說明。

+0

如果你描述你真的想要做什麼,我想你會得到更好的幫助,因爲你描述的內容很難理解。爲什麼曲奇會參與一個你不關心響應何時進入的序列? – 2010-02-23 02:31:31

回答

2

使用httplib的和的urllib2的 請求是同步的,除非我用 線程,在這種情況下,爲了不 保證尊重

你怎麼知道的是,爲了一直推崇除非在將響應發送到第二個連接之前,您從第一個連接獲得迴應?畢竟,你不關心響應是按什麼順序進來的,所以響應很可能會按照你期望的順序返回,但你的請求是按錯誤順序處理的!

您可以保證排序的唯一方法是在開始第二個請求之前,等待確認第一個請求已成功到達(例如,您開始接收響應)。您可以通過在到達第一個線程的響應處理部分之前不啓動第二個線程來完成此操作。

+0

非常感謝您的回答。我仍然有幾個問題: HTTP不保證數據包是按接收者發送的順序處理的(因爲它是建立在TCP和TCP上的)?在那種情況下,在HTTP級別,我所要做的就是同步發送和異步接收。我假設有問題嗎?另外,我確實可以只響應處理部分,但是IRC有時會一次發送很多命令:它會使處理時間延長大約幾倍。 (請注意,我編輯了更多關於我想實現的問題) – Lay 2010-02-23 11:54:26

+0

TCP確實保證爲給定連接保留數據,但是當您發出多個HTTP請求時,通常不會使它們與相同的連接,以保證與您的情況無關。特別是你不能按照你喜歡的方式拆分請求和響應,因爲你不能保證請求實際上已經被處理,即使你發送了所有的東西,直到你看到響應。基本上,我認爲您的異步要求不符合您的訂購要求。 – Kylotan 2010-02-23 14:49:44

+0

是的,你是對的,假設訂單將被保存在HTTP中,只是因爲它在TCP上是不好的。我將檢查我記住的最後一個選項(通過單個HTTP請求發送多個IRC命令的方法,如果我連接的Web界面允許),如果它不起作用,我將不得不做出選擇(這可能是一箇中間選擇,例如以不同的方式處理命令重要的命令和不重要的命令)。再次感謝您的幫助。 – Lay 2010-02-24 00:41:12