使用cURL和PHP登录网站

使用cURL和PHP登录网站,php,html,json,curl,web,Php,Html,Json,Curl,Web,嘿,我正在尝试登录NJIT网站,检查用户名和密码是否正确。由于某些原因,即使我使用了正确的凭据,我也会被拒绝。另外,我如何剥离$result以检查它是否包含“Fail”,这意味着凭据是错误的。这是我的密码 主要内容: }实际上,当我们加载页面时,它会保存cookie并发送它。因此,要登录,您首先需要在没有凭据的情况下访问页面并保存cookie。在下一个请求中,您需要发送cookies。为了避免bot脚本登录,网站通常具有动态隐藏字段和其他安全性。。在这种情况下,您无法登录。我更新了太多功能,使其

嘿,我正在尝试登录NJIT网站,检查用户名和密码是否正确。由于某些原因,即使我使用了正确的凭据,我也会被拒绝。另外,我如何剥离$result以检查它是否包含“Fail”,这意味着凭据是错误的。这是我的密码

主要内容:


}

实际上,当我们加载页面时,它会保存cookie并发送它。因此,要登录,您首先需要在没有凭据的情况下访问页面并保存cookie。在下一个请求中,您需要发送cookies。为了避免bot脚本登录,网站通常具有动态隐藏字段和其他安全性。。在这种情况下,您无法登录。

我更新了太多功能,使其更灵活--如果需要,您可以进一步更新它

首先也是最重要的,您需要在报废文件所在的目录中创建一个名为
cookie.txt
的文本文件

function goCurlNJIT($header = array(), $url, $post = false)
    {       
        $cookie = "cookie.txt";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate,sdch');
        if (isset($header) && !empty($header))
        {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 200);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
        curl_setopt($ch, CURLOPT_COOKIEJAR, realpath($cookie));
        curl_setopt($ch, CURLOPT_COOKIEFILE, realpath($cookie));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_REFERER, $url);

        //if it's a POST request instead of GET

        if (isset($post) && !empty($post) && $post)
        {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        } //endif
        $data = curl_exec($ch);
        curl_close($ch);
        if($info['http_code'] == 200){
            return ($data);     //this will return page on successful, false otherwise
        }else{
            return false;
        }
    }
如果您仔细查看了
请求的头文件
,您会注意到其中有一个异常头文件,即
升级不安全请求:1
(我个人以前没有看到过这一点,所以最好将此文件与请求一起发送)

下一步您发布的请求与实际情况不符,您缺少内容

$UCID="jko328";
$Pass="password";
$credentialsNJIT="user=".$UCID."&pass=".$Pass;    // where is uuid?
应该是这样的。您正在从
post-string
跳过
uuid

pass=password&user=jko328&uuid=0xACA021
总而言之

$post['user'] = "jko328";
$post['pass'] = "password";
$post['uuid'] = '0xACA021';
$urlToPost = "https://cp4.njit.edu/cp/home/login";
$header['Upgrade-Insecure-Requests'] = 1;
//Now make call to function, and it'll work fine.
echo goCurlNJIT($header, $urlToPost, http_build_query($post));

这很好用。确保您已在该脚本所在的目录中创建了
cookie.txt
文件。

输出给您的具体内容是什么?您是否收到403?输出是标准的“失败的用户名/密码不在数据库中”错误,如果您输入了错误的凭据,njit将响应该错误。问题是,即使我输入了正确的凭据,我仍然会收到“用户名/密码未找到”错误。你完全错了。我希望这会对你有所帮助。
pass=password&user=jko328&uuid=0xACA021
$post['user'] = "jko328";
$post['pass'] = "password";
$post['uuid'] = '0xACA021';
$urlToPost = "https://cp4.njit.edu/cp/home/login";
$header['Upgrade-Insecure-Requests'] = 1;
//Now make call to function, and it'll work fine.
echo goCurlNJIT($header, $urlToPost, http_build_query($post));