2013-04-01 5 views
1

Мне нужно автоматизировать извлечение каталога продуктов, для которого мы являемся авторизованным дистрибьютором. Компания Ingram Micro, и они огромны, но они не предоставляют простой способ (например, веб-сервис) запрашивать свой каталог и запас, поэтому мы до сих пор извлекаем его с помощью LWP :: UserAgent, ежедневно, для нашей базы данных онлайн-магазина.Не удалось POST ASP-NET форма с WWW :: Механизмом или LWP :: UserAgent

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

Сайт создан на основе AspNet и содержит поля скрытой формы, созданные ASP. Сначала я делал свой собственный «паук», чтобы получить страницу входа в систему, прочитать все значения скрытого поля и включить их в мой запрос на отправку POST вместе с именем пользователя и паролем, но теперь, после этой проблемы, я начал использовать WWW: : Механизировать выполнение запросов и автоматизировать эту задачу.

Однако не WWW :: Mechanize или LWP :: UserAgent могут выполнить успешный вход в систему.

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

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

Вы можете увидеть страницу входа здесь: https://www.imstores.com/ingrammicromx/

Пожалуйста, если кто-то имеет опыт работы с подобным вопросом или кто-то может смотреть на этой странице, и обнаружить, что делает браузер отличается от WWW :: Механизируйте запрос, пожалуйста, дай мне знать.

спасибо.

+0

изменить пользовательский агент для эмуляции Internet Explorer или Chrome –

ответ

5

Обычно я использую этот способ, чтобы проверить, что случилось:

  1. Очистить все куки в вашем браузере
  2. Отключить Javascript
  3. Открыть Логин страницу
  4. Попробуйте войти

Если у вас есть успешный логин, чем вы можете сделать это с помощью WWW :: Механизировать без дополнительных трюков, просто не забудьте использовать button => "submit_button_name", как это:

$mech->submit_form(
    with_fields => { 
     login_field_field => $login, 
     password_field_name => $password, 
    }, 
    button => "submit_button_name", 
); 

Даже если вы не можете войти в систему через браузер с Javascript отключена, вы все еще можете сделать это с Mechanize, но вы должны смотреть на запросе HTTP браузера (я использую HTTPFox для этого) и сделать точно такой же запрос (включая заголовки) от Mechanize.

+1

Большое вам спасибо за ответ! Чувак, ВА-АРЕ-МАН. Теперь работает! Я не могу поверить, что такая небольшая перемена сделала это. Я использовал метод submit_form, но я включил кнопку отправки в полях. Используя его, как и вы, он сработал. Зачем????? Ну, я делаю * заботу, я бы хотел узнать причину этого, но что бы это ни было, мне нравится, что он работает, НАКОНЕЦ. СПАСИБО.Хотел бы я дать вам гораздо больше, чем голосовать. :-) –

+1

Этот способ Механизировать отправку кнопок button.x и button.y на целевой сайт. И из моего опыта ASP-сайты не нравятся, если ваше приложение не отправляет эту информацию. – gangabass

+1

+1 для 'кнопки'. ASPX не будет работать без этого! – daisy