我想登录网站bukalapak.com,但我有问题我执行此php后只得到空白页,这里是我的代码:
var_dump(login_bukalapak());
function login_bukalapak(){
$data_login = array(
'user_session[username]' => 'myusername',
'user_session[password]' => 'mypassword'
);
$url = "https://www.bukalapak.com/user_sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$cookie = 'cookies.txt';
$timeout = 30;
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS,$data_login);
$result = curl_exec($ch);
/*$url = "https://www.bukalapak.com/products/new?from=dropdown";
curl_setopt ($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);*/
curl_close($ch);
return $result;
}
我很困惑我只是回到空白,如何正确的答案让它运行良好并返回成功登录? 感谢。
答案 0 :(得分:0)
你在这里犯了很多错误。
1:他们的登录系统对登录POST请求正文使用application / x-www-form-urlencoded编码,但您的代码尝试使用multipart / form-data编码登录。
2:他们的登录系统要求您在登录前拥有预先存在的cookie会话,但您的代码在发送登录请求之前不会获得cookie会话。
3:他们使用CSRF令牌方案来保护他们的登录,您需要从页面获取csrf令牌,并在发送登录请求之前将其添加到您的登录帖子字段,称为authenticity_token
(它是在他们的html中为<input type="hidden" name="authenticity_token" value="<TOKEN>" />
),您的代码在登录之前不会尝试获取和提取此令牌。
4:你遗漏了一堆登录参数,即utf8
,user_session[remember_me]
,comeback
,button
,正如我之前所说,{{ 1}} - 并非所有这些参数都可能是必需的,或者所有这些参数都是必需的,但至少其中一些参数(authenticity_token
)100%肯定是必需的,只需将它们全部添加,除非你想浪费时间弄清楚哪些参数是必需的,哪些不是,这可能不值得努力。
5:您的代码缺少错误检查,如果设置设置有问题,curl_setopt返回bool(false),如果传输过程中出现问题,curl_exec返回bool(false)
考虑到这一点,这是hhb_curl中的示例实现,我认为将使用真实的用户名/密码:
authenticity_token