使用 PHP curl 获取登录内容
Get logged in content using PHP curl
我尝试使用以下代码获取登录页面的内容。我尝试了不同的 URL,但对于这个,我不确定为什么它返回空白结果。我检查了错误日志,没有显示任何内容,我的 curl 已启用。
solved
您的 curl 设置中存在一些配置错误,首先:
$login = array(
'username' => $username,
'password' => $pass,
'login' => 'login'
);
这应该只有您想要 post 的字段,因此 'login' => 'login'
是无关紧要的。
字段名称必须与表单字段名称匹配,否则它们对服务器没有意义。您可以通过 Firebug 或 inspect element.
查看他们的名字
第二个:
$loginUrl = 'https://affiliate.styles.my/index.php/login/page/login';
既然你是postform
,你应该post到action
属性中设置的url,你可以找到这个通过在 FireFox 中触发检查元素,检查 form
标签,然后查看 url action
属性指向什么。
试试这个:
<?php
$username = 'eldy';
$pass = '1234';
$login = array(
'user' => $username,
'password' => $pass
);
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
echo http_build_query($login);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login));
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/dashboard/page/dashboard");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$content2 = curl_exec($ch);
echo $content2;
curl_close($ch);
?>
首先您的登录 post url 不正确。实际形式posturl是
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
除了表单 post 字段设置不正确外,密码字段应该是 'pass' 而不是 'password'
$login = array(
'username' => $username,
'pass' => $pass,
'login' => 'login'
);
所以正确的方法是
首先加载登录页面
发送 post 数据
然后获取仪表板页面
这是正确的代码
<?php
$username = 'eldy';
$pass = '1234';
$login = array(
'username' => $username,
'pass' => $pass,
'login' => 'login'
);
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/login");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_exec($ch);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
var_dump($ch);
$content = curl_exec($ch);
//echo $content;
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/dashboard/page/dashboard");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$content2 = curl_exec($ch);
echo $content2;
curl_close($ch);
我尝试使用以下代码获取登录页面的内容。我尝试了不同的 URL,但对于这个,我不确定为什么它返回空白结果。我检查了错误日志,没有显示任何内容,我的 curl 已启用。
solved
您的 curl 设置中存在一些配置错误,首先:
$login = array(
'username' => $username,
'password' => $pass,
'login' => 'login'
);
这应该只有您想要 post 的字段,因此 'login' => 'login'
是无关紧要的。
字段名称必须与表单字段名称匹配,否则它们对服务器没有意义。您可以通过 Firebug 或 inspect element.
第二个:
$loginUrl = 'https://affiliate.styles.my/index.php/login/page/login';
既然你是postform
,你应该post到action
属性中设置的url,你可以找到这个通过在 FireFox 中触发检查元素,检查 form
标签,然后查看 url action
属性指向什么。
试试这个:
<?php
$username = 'eldy';
$pass = '1234';
$login = array(
'user' => $username,
'password' => $pass
);
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
echo http_build_query($login);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login));
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/dashboard/page/dashboard");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$content2 = curl_exec($ch);
echo $content2;
curl_close($ch);
?>
首先您的登录 post url 不正确。实际形式posturl是
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
除了表单 post 字段设置不正确外,密码字段应该是 'pass' 而不是 'password'
$login = array(
'username' => $username,
'pass' => $pass,
'login' => 'login'
);
所以正确的方法是 首先加载登录页面 发送 post 数据 然后获取仪表板页面 这是正确的代码
<?php
$username = 'eldy';
$pass = '1234';
$login = array(
'username' => $username,
'pass' => $pass,
'login' => 'login'
);
$loginUrl = 'https://affiliate.styles.my/index.php/login/dologin';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/login");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_exec($ch);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
var_dump($ch);
$content = curl_exec($ch);
//echo $content;
curl_setopt($ch, CURLOPT_URL, "https://affiliate.styles.my/index.php/dashboard/page/dashboard");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$content2 = curl_exec($ch);
echo $content2;
curl_close($ch);