Возникли проблемы при запуске скрипта механизации в Linux, когда он нормально работает на Windows - PullRequest
2 голосов
/ 29 декабря 2010

Ну, вот в чем дело, я написал скрипт на Python, который подключается к моей веб-странице работ и загружает мою последнюю зарплату.Он отлично работает в Windows, но когда я перемещаю этот скрипт на мой сервер, на котором запущен Debian, он не перенаправляет мимо начальной страницы.Есть ли разница между платформами?Поиск по часам не принес мне никакой полезной информации.Я удостоверился, что обе системы и работают с одной и той же версией Mechanize, но версии Python отличаются (РЕДАКТИРОВАТЬ: теперь обе идентичны), хотя немного отличаются.

Both systems are running identical versions of Python and mechanize.
# >> python -V
Python 2.7.1
#mechanize >> print(mechanize.__version__)
(0, 2, 4, None, None)

Теперь я создал раздетуюСкриптовый тестовый скрипт только для тестирования.Это так, чтобы я мог легко сравнить результаты.В Windows скрипт вернет последнюю страницу, содержащую список всех доступных чеков, в то время как в Linux он напечатает только начальную страницу, которая должна быть перенаправлена ​​на страницу входа.Мне кажется, что механизация под Linux либо вообще не перенаправляет, либо просто не устанавливает cookie, который необходим для продолжения.

Есть идеи?предложения?Я в основном спрашиваю, есть ли разница в механизации между Windows и Linux.Так как содержимое пакета из того же источника, я думаю, нет, но тогда что вызывает эту проблему?

Вот код, который я использую для тестирования.Очевидно, я пропустил правильное имя пользователя и пароль:)

import mechanize;
import urllib;

#constants
URL_OPEN = "https://ep.upsers.com/ep-s/UPSRegistration/UPSLogin";#set a cookie
URL_SECURE = "https://ep.upsers.com/gems-secure/epay_eng.html";
URL_PAYCHECK = "https://ep.upsers.com/gems-secure/psc/hrprod/EMPLOYEE/HRMS/c/M_UPS_MENU.VW_PYCHK_M.GBL?Page=PYCHKDAT_M&Action=U";#lists paychecks
VIEWALL = "#ICViewAll";


def testConnection(username, password):
    success = "no connection: ";

    try:
        #get a cookie to use later
        mechanize.HTTPSHandler();
        request1 = mechanize.Request(URL_OPEN);
        response1 = mechanize.urlopen(request1);

        #attempt our login
        postdata = {"user": username,"password": password};
        post = urllib.urlencode(postdata);
        headers =  {"User-agent" : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"};
        request2 = mechanize.Request(URL_OPEN, post, headers);
        response2 = mechanize.urlopen(request2);

        #navigate to paycheck page
        request3 = mechanize.Request(URL_PAYCHECK);
        response3 = mechanize.urlopen(request3);

        success = response3.read();

    except Exception as ex:
        success += str(ex);

    print(success);
#end testConnection

testConnection('USERNAME', 'PASSWORD')

Первоначально я думал, что может потребоваться изменить пользовательский агент, но в результатах нет изменений.

ПРИМЕЧАНИЕ:Теперь обе версии Python и Mechanize идентичны.ПРИМЕЧАНИЕ. Я заметил, что при проверке заголовков при каждом запросе cookie не устанавливается / хранится в Linux, а в Windows - это нормально.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Какой пользователь выполняет сценарий на сервере и какими привилегиями он обладает?

Вы вносите несколько изменений в среду выполнения одновременно:

  1. Версия Python.
  2. Операционная система.
  3. Пользователь
  4. Пользовательская среда (пользователи с домашними каталогами различаются).

Попробуйте сузить до одного изменения ввремя.Было бы неплохо проверить виртуализированный Linux на вашем компьютере с Windows.

0 голосов
/ 29 декабря 2010

Я бы посоветовал перед тем, как приступить к глубоким подозрениям, попытаться устранить очевидные различия: загрузите Python 2.7 (устанавливать его не нужно) и посмотрите, соответствует ли поведение Windows.

Вот сборкаи запустите 2.7 'copy-n-paste:

wget http://python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -xzf Python-2.7.1.tgz
cd Python-2.7.1/
./configure && make
./python /path/to/your/script
...