2010-02-22 66 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