1

我正在尝试制作一个脚本,该脚本将在我每天访问的一些网站上运行,并从中获取最有趣的信息/统计数据。我想为此目的使用 curl,因为其中一些站点需要身份验证。一切都很好,直到我碰到了这个站点:rossnet.pl,它似乎以某种方式安全,因为我根本无法验证自己的身份。

我想使用的表格可以在这里找到: https ://www.rossnet.pl/rossnetlogin.aspx

在左侧,文字下方:“Mam konto w Rossnet.pl - Logowanie”。它似乎没有任何隐藏的输入字段,只有两个用于凭据的文本字段,称为:-“dnn$ctr1203$ViewLogin$txtUserLogin”-“dnn$ctr1203$ViewLogin$txtUserPass”

我正在使用下面显示的代码,但服务器返回的页面似乎完全没有发生任何事情(没有错误消息,看起来与我不发送任何 POST 数据时相同)。

有谁知道可能出了什么问题?在下面的代码中,我输入了实际的帐户凭据,以便您能够测试脚本,如果您想帮助我。

在这里你可以看到下面的脚本是如何在我的服务器上工作的:http: //kremuwa.netii.net/rossman/skrypt.php

<?php

$url = "https://www.rossnet.pl/rossnetlogin.aspx";   

$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'dnn$ctr1203$ViewLogin$txtUserLogin=warzywko3000&dnn$ctr1203$ViewLogin$txtUserPass=password123');

$output = curl_exec($ch);  

curl_close($ch);  

echo $output;

?>
4

1 回答 1

1

登录表单有时会受到挑战的保护,这些挑战会阻止您在不先加载页面的情况下直接提交表单。我列出了一些可能会妨碍您的选项。

一种选择是 cookie 挑战,它也是最容易处理的,只需加载页面(获取 cookie)并将其与表单提交一起发送。

另一种选择是隐藏领域挑战;隐藏的表单字段填充了质询代码,并且提交也希望发送该值。

我能想到的最后一个选项是涉及 JavaScript 的更困难的方法。该页面将使用 JavaScript 加载挑战字符串,可能会对其进行一些混淆,然后将其发送(通过隐藏的表单字段或 ajax 请求)。

于 2012-08-30T15:50:52.257 回答