我编写了以前成功处理登录/密码脚本的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元素,即使我认为我已在代码中识别出所有这些元素。
答案 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登录凭证。