无法使用WWW :: Mechanize或LWP :: UserAgent POST ASP-NET表单

Fra*_*ozo 1 asp.net-mvc perl web-crawler www-mechanize lwp-useragent

我需要自动提取产品目录,我们是授权经销商.该公司是Ingram Micro,它们很庞大,但是他们没有提供一种简单的方法(比如Web服务)来查询他们的目录和库存,所以到目前为止我们一直在用LWP :: UserAgent提取它,对于我们的在线商店数据库

最近,他们改变了他们的网站,有些东西我无法检测到阻止我的Perl脚本成功登录.如果我直接在浏览器上尝试,我会成功登录,但如果我尝试从Perl提交表单,我会再次获取登录页面(如登录失败).

他们的网站是在AspNet上制作的,并且包含ASP生成的隐藏表单字段.起初,我正在做自己的'蜘蛛'来获取登录页面,读取所有隐藏的字段值并将其包含在我的POST登录请求中以及用户名和密码,但现在,在此问题之后,我开始使用WWW: :机械化以执行请求并正确自动执行该任务.

但是,WWW :: Mechanize或LWP :: UserAgent不能成功登录.

我甚至尝试查看浏览器和服务器之间的确切HTTP会话,并在我的自动请求中使用正确的POST内容包含相同的标题,甚至这样做我从Perl获得了一个不成功的登录,并且成功登录了浏览器.

我真的很绝望,我无法检测到问题,如果没有此目录更新,我们无法运行商店.

您可以在此处查看登录页面:https://www.imstores.com/ingrammicromx/

如果有人有类似问题的经验或有人可以查看该页面并检测浏览器与WWW :: Mechanize请求的不同之处,请告诉我.

谢谢.

gan*_*ass 5

通常我用这种方式测试出错了什么:

  1. 清除浏览器中的所有Cookie
  2. 禁用Javascript
  3. 打开登录页面
  4. 尝试登录

如果你有成功登录,你可以使用WWW :: Mechanize,而不需要额外的技巧,不要忘了这样使用button => "submit_button_name":

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

即使您无法在禁用Javascript的情况下从浏览器登录,您仍然可以使用Mechanize执行此操作,但您需要查看浏览器的HTTP请求(我使用HTTPFox)并从Mechanize 发出完全相同的请求(包括标题).