Необъяснимая проблема Urllib2 между virtualenv. - PullRequest
5 голосов
/ 22 сентября 2011

У меня есть некоторый тестовый код (как часть веб-приложения), который использует urllib2 для выполнения операции, которую я обычно выполняю через браузер:

  • Вход на удаленный веб-сайт
  • Перейти на другую страницу
  • Выполнить POST, заполнив форму

Я создал 4 отдельных чистых virtualenvs (с --no-site-packages) на 3разные машины, все с разными версиями python, но с одинаковыми пакетами (через файл требований pip), и код работает только на двух virtualenv на моей локальной машине разработки (2.6.1 и 2.7.2) - он не будет работатьна любом из моих производственных VPS

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

  • , поскольку я могу успешно войти в систему и перейти на вторую страницу, это, похоже, не проблема сеанса или файла cookie - это относится к окончательному POST
  • , потому что яможет выполнить операцию на конкретной машине с ТОЧНЫМИ заголовками и данными, это не является проблемой с тем, что я запрашиваю / публикую
  • , потому что я пытаюсь кодировать на двух отдельных VPS, арендованных уВ разных компаниях это не является проблемой для физической среды VPS
  • , поскольку код работает на 2 разных версиях Python, я не могу представить, что это проблема несовместимости

На этом этапе я совершенно растерялся, почему это не сработало.Я даже «выключил и включил снова», потому что просто не понимаю, в чем проблема.

Я думаю, что это как-то связано споследний POST от VPS, который не нравится удаленному серверу, но я не могу понять, что это может быть.Я чувствую, что что-то происходит под капотом URLlib, что заставляет удаленный сервер не любить ответ.

РЕДАКТИРОВАТЬ Я установил точно такую ​​же версию Python (2.6.1) на VPS, как и на моей рабочей локальной копии, и она не работает удаленно, поэтому это должно быть что-тоделать с выходом из VPS.Как это может повлиять на запрос Http?Это что-то более низкого уровня?

Ответы [ 4 ]

1 голос
/ 26 сентября 2011

Это полный выстрел в темноте, но ваши VPS 64-битные и ваш домашний компьютер 32-битные, или наоборот? Возможно, разница в размерах по умолчанию или точности в что-то может привести в замешательство сервер.

Кроме этого, вы можете попытаться найти какую-либо информацию о программном стеке, который использует веб-сервер?

1 голос
/ 01 октября 2011

У меня были похожие проблемы с urllib2 (работающим с REST API Zimbra), в конце концов, с успехом переключился на pycurl.

PS для операций входа / навигации / публикации я обычно нахожу Механизация полезной и более простой в использовании. Может быть, вы можете дать ему шоу.

1 голос
/ 25 сентября 2011

Вы можете попробовать установить debuglevel = 1 для urllib2 и посмотреть, что получится:

import urllib2
h=urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(h)
...
0 голосов
/ 07 октября 2011

Ну, похоже, я знаю , почему проблема произошла, но я не на 100% причина для этого.

Мне просто пришлось заставить сервер ждать (time.sleep ()) после того, как он отправил 2-й запрос ( Перейти на другую страницу ), прежде чем выполнить 3-й запрос ( ВыполнитьPOST, заполнив форму ).

Не знаю, связано ли это с состоянием стороннего сервера или это какая-то странная проблема с URLlib?Причина, по которой он работал на моей машине для разработки, предположительно потому, что он выполнял код медленнее, чем сервер?

...