CURL具有特殊登录表单

时间:2014-02-06 07:08:43

标签: php curl

我编写了以前成功处理登录/密码脚本的curl脚本。但我面对的是一个我无法打破的。这是我的代码:

<?
$login_email = "xxxx" ;
$login_pass = "xxx" ;
$cookie_file_path = "cookie3.txt"; 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://89.31.145.108/athezza/index.php?php_action=IDENTIFICATION_form&type_ident=b2b');
curl_setopt($ch, CURLOPT_POSTFIELDS,'login='.urlencode($login_email).'&password='.urlencode($login_pass).'&php_action=IDENTIFICATION_login&type_ident=b2b');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_REFERER, "http://89.31.145.108/athezza/");
$page = curl_exec($ch);

var_dump($page);
?>

,页面如下:

http://89.31.145.108/athezza/index.php?php_action=IDENTIFICATION_form&type_ident=b2b

不知怎的,我无法设法发送足够的POST元素,即使我认为我已在代码中识别出所有这些元素。

2 个答案:

答案 0 :(得分:1)

首先,必须使用FULL路径值初始化选项CURLOPT_COOKIEFILE / CURLOPT_COOKIEJAR。 “cookie3.txt”是相对路径。 其次,不要手动构建POST数据,而是使用http_build_query()

所以你的代码应该是这样的:

$login_email = "xxxx";
$login_pass = "xxx";
$cookie_file_path = dirname(__FILE__)."/cookie3.txt"; 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://89.31.145.108/athezza/index.php');
$data = array(
    'php_action' => 'IDENTIFICATION_login', 'type_ident' => 'b2b', 'login' => $login_email, 'password' => $login_pass
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_REFERER, "http://89.31.145.108/athezza/");
$page = curl_exec($ch);

答案 1 :(得分:1)

在发布登录数据之前,首先使用curl浏览登录页面,以便在文件中包含一些会话cookie。

$home = curl_init();
curl_setopt($home, CURLOPT_URL, 'http://89.31.145.108/athezza/index.php');
curl_setopt($home, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($home, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($home, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_exec($home);
curl_close($home);

现在使用您的数据来POST登录凭证。