Python:如何按顺序发送异步HTTP请求并自动处理Cookies?

1 投票
1 回答
1612 浏览
提问于 2025-04-15 19:36

我正在编写一个Python(2.6)接口,用于与一个网络服务进行通信。我需要通过HTTP来交流,具体要求如下:

  • Cookies需要自动处理,
  • 请求要异步
  • 发送请求的顺序要得到尊重(收到这些请求的响应顺序无所谓)。

我尝试了使用内置库的简单方法,但遇到了不同的问题:

  • 使用httpliburllib2时,请求是同步的,除非我使用thread,但这样就无法保证顺序了,
  • 使用asyncore时,没有库可以自动处理网络服务发送的Cookies。

经过一些搜索,似乎有很多Python脚本或库能满足其中两个条件,但没有一个能同时满足三个条件。我在考虑查看cookielib的源代码,并将我需要的部分适配到asyncore中(或者仅仅为我的应用程序做一些临时的调整),但我觉得奇怪的是,居然没有类似的解决方案出现,因为我想我并不是唯一一个对此感兴趣的人。如果有人知道解决这个问题的线索,我将非常感激。

谢谢。

编辑以澄清:

我正在做的是一个本地代理,它将我的IRC客户端与一个网页聊天接口连接起来。它创建一个监听IRC连接的套接字,然后在收到连接后,通过HTTP登录网页聊天。我无法控制网页聊天的行为,它使用Cookies来管理会话ID。当客户端向我的Python代理发送多个IRC请求时,我需要通过HTTP将它们转发到网页聊天的服务器,并带上Cookies。我还希望能够异步处理(我不想在发送下一个请求之前等待HTTP响应),但目前的情况是,HTTP请求的发送顺序与接收到的IRC命令顺序不一致。

希望这能澄清我的问题,如果还有不清楚的地方,我会进一步详细说明。

1 个回答

2

使用httplib和urllib2时,请求是同步的,除非我使用线程,这样的话,顺序就不一定能保证了。

你怎么知道顺序是被遵守的呢?除非你在发送第二个请求之前,先收到了第一个请求的响应。毕竟,你并不在乎响应的到达顺序,所以很可能响应是按照你预期的顺序返回的,但你的请求却是以错误的顺序被处理的!

要确保顺序正确,唯一的方法就是在确认第一个请求成功到达(比如你开始收到它的响应)之后,再开始第二个请求。你可以通过在处理第一个线程的响应之前,不启动第二个线程来做到这一点。

撰写回答