PHP使用CURL登录无效

时间:2018-01-05 06:40:22

标签: php curl

我想登录网站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;
}

我很困惑我只是回到空白,如何正确的答案让它运行良好并返回成功登录? 感谢。

1 个答案:

答案 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:你遗漏了一堆登录参数,即utf8user_session[remember_me]comebackbutton,正如我之前所说,{{ 1}} - 并非所有这些参数都可能是必需的,或者所有这些参数都是必需的,但至少其中一些参数(authenticity_token)100%肯定是必需的,只需将它们全部添加,除非你想浪费时间弄清楚哪些参数是必需的,哪些不是,这可能不值得努力。

5:您的代码缺少错误检查,如果设置设置有问题,curl_setopt返回bool(false),如果传输过程中出现问题,curl_exec返回bool(false)

考虑到这一点,这是hhb_curl中的示例实现,我认为将使用真实的用户名/密码:

authenticity_token