鍍金池/ 問答/PHP  Linux/ 關(guān)于使用 php+curl 模擬登錄成功?后,想要獲取登錄成功后的其他頁面信息時

關(guān)于使用 php+curl 模擬登錄成功?后,想要獲取登錄成功后的其他頁面信息時,還是跳轉(zhuǎn)到重新登錄界面

如題

保存到本地的cookie信息如下

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_jiaowu.jvtc.jx.cn    FALSE    /    FALSE    0    JSESSIONID    4617AD6BC807F226E447CB9580274A23

curl使用代碼如下

... 
// 初始化 
function login_init($url,$cookie) {
    $ch = curl_init();
    curl_setopt($ch , CURLOPT_URL , $url);
    curl_setopt($ch , CURLOPT_RETURNTRANSFER , 1); // 不直接輸出
    curl_setopt($ch , CURLOPT_COOKIEJAR , $cookie); // 保存cookie
    curl_exec($ch);
    curl_close($ch);
}

....

// 獲取驗(yàn)證碼
function getVerfyCode($url,$cookie) {
    $ch = curl_init($url);
    curl_setopt($ch , CURLOPT_COOKIEFILE, $cookie);
    curl_setopt($ch , CURLOPT_RETURNTRANSFER , 1); // 不直接輸出
    $img = curl_exec($ch);
    curl_close($ch);
    $fp = fopen("verifyCode.jpg",'w');
    fwrite($fp,$img);
    fclose($fp);  // 寫入到當(dāng)前文件下
    // 返回驗(yàn)證碼code
    return currentImg('verifyCode.jpg');
}



// 初始化界面
login_init($url,$cookie_file);

// 得到驗(yàn)證碼
$code = getVerfyCode($verify_code_url,$cookie_file); 

// 表單信息
$p['userAccount'] = '163050581';
$p['userPassword'] = '163050581';
$p['RANDOMCODE'] = $code;

$encoded = getEncoded("http://jiaowu.jvtc.jx.cn/Logon.do?method=logon&flag=sess",$cookie_file);
$p['encoded'] = $encoded;

login($post_url , $cookie_file,$p); // 登錄成功
echo "登錄成功";
// 獲取頁面
getPage("http://jiaowu.jvtc.jx.cn/jsxsd/xskb/xskb_list.do",$cookie_file);

// 登錄
function getPage($url , $cookie){
    $header = array(
        'Referer: http://jiaowu.jvtc.jx.cn/jsxsd/framework/xsMain.jsp',
        'Accept-Language: zh-CN,zh;q=0.9',
        'Host: jiaowu.jvtc.jx.cn',
        'Upgrade-Insecure-Requests: 1',
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
    );
    $ch = curl_init();
    curl_setopt($ch , CURLOPT_URL , $url);
    curl_setopt($ch , CURLOPT_HEADER,1);  // 輸出 header
    curl_setopt($ch , CURLOPT_RETURNTRANSFER , 0); // 直接輸出
    curl_setopt($ch , CURLOPT_COOKIEFILE, $cookie);// 讀取cookie信息
    curl_setopt($ch , CURLOPT_HTTPHEADER, $header);
    $page = curl_exec($ch); //執(zhí)行curl轉(zhuǎn)去頁面內(nèi)容
    curl_close($ch);
}

不是應(yīng)該登錄上了么?

bVbgOwZ

最后得到的信息如下,我確認(rèn)了一下,登錄前登錄后的 cookie 保持不變,所以在登錄后不是應(yīng)該可以正常獲取信息嗎,我看了好多示例代碼,應(yīng)該是這樣吧,請求的沒有出現(xiàn)什么問題,求解啊

源代碼地址: https://github.com/RA31/login...

回答
編輯回答
命于你

總是調(diào)用這兩個參數(shù) 并確保始終是一個cookie文件。

先確認(rèn)對方網(wǎng)站的校驗(yàn)方式

  • CURLOPT_COOKIEFILE
  • CURLOPT_COOKIEJAR
2018年8月13日 03:59