Python: Асинхронные HTTP-запросы отправляются по порядку с автоматической обработкой файлов cookie? - PullRequest
1 голос
/ 23 февраля 2010

Я пишу интерфейс Python (2.6) для веб-службы. Мне нужно общаться через http, чтобы:

  • Cookies обрабатываются автоматически,
  • Запросы асинхронные ,
  • Порядок , в котором отправляются запросы, соблюдается (порядок получения ответов на эти запросы не имеет значения).

Я попробовал то, что можно легко извлечь из встроенных библиотек, столкнувшись с различными проблемами:

  • При использовании httplib и urllib2 запросы выполняются синхронно, если только я не использую thread, и в этом случае порядок не гарантируется,
  • При использовании asyncore не было библиотеки для автоматической обработки файлов cookie, отправляемых веб-службой.

После некоторого поиска в Google, кажется, есть много примеров скриптов или библиотек на python, которые соответствуют 2 из 3 критериев, но не 3 из них. Я думаю о том, чтобы прочитать источники cookielib и адаптировать то, что мне нужно, к asyncore (или только для моего приложения в режиме ad hoc ), но кажется странным, что ничего подобного не существует тем не менее, как я думаю, я не единственный, кто заинтересован. Если кто-нибудь знает об указателях на эту проблему, это будет с благодарностью.

Спасибо.

Изменить, чтобы уточнить:

То, что я делаю, - это локальный прокси, который связывает мой IRC-клиент с веб-чатом. Он создает сокет, который прослушивает IRC-соединения, а затем, получив его, регистрируется в веб-чате через http. У меня нет доступа к поведению веб-чата, и он использует куки для идентификаторов сеансов. Когда клиент отправляет несколько запросов IRC моему прокси-серверу Python, я должен перенаправить их на сервер веб-чата по протоколу http и с помощью файлов cookie. Я также хочу сделать это асинхронно (я не хочу ждать ответа http, прежде чем отправить следующий запрос), и в настоящее время происходит следующее: порядок, в котором отправляются запросы http, не соответствует порядку, в котором IRC команды были получены.

Надеюсь, это прояснит вопрос, и я, конечно, опишу подробнее, если это не так.

1 Ответ

2 голосов
/ 23 февраля 2010

Используя httplib и urllib2, запросы синхронны, если я не использую поток, в этом случае порядок не гарантированно будет соблюдаться

Как вы узнаете, что заказ был соблюден, если вы не получите ответ от первого соединения, прежде чем отправить ответ на второе соединение? В конце концов, вам все равно, в каком порядке поступают ответы, поэтому вполне возможно, что ответы возвращаются в том порядке, в котором вы ожидаете, но ваши запросы были обработаны в неправильном порядке!

Единственный способ гарантировать заказ - дождаться подтверждения того, что первый запрос успешно получен (например, вы начинаете получать ответ на него), прежде чем начинать второй запрос. Вы можете сделать это, не запуская второй поток, пока не достигнете части обработки ответов первого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...