CURL 补充

今天一同学提醒了我,为什么一直用的php模拟登陆必须要io操作呢,然后帮他测试代码,
附上成功实现的程序,以模拟登陆南理工教务管理系统为例。认证成功后获取cookie,访问成绩页面。


 
   

header ('Content-Type: text/html; charset=utf-8');



$id='';
$psw='';


$pswd=strtoupper(md5($psw));

$url_login = "http://202.119.81.112:9080/njlgdx/xk/LoginToXk?method=verify&USERNAME=$id&PASSWORD=$pswd";
echo $url_login;

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url_login);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content=curl_exec($ch);
curl_close($ch);


preg_match('/Set-Cookie:(.*);/iU',$content,$str);
print_r($str);
$cookie=trim($str[1]);
echo $cookie;


$url="http://202.119.81.112:9080/njlgdx/kscj/cjcx_list";
$data = array (
'xsfs'=>'all',
);

//post
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);


curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect'));

//// mark!! CURLOPT_COOKIE
curl_setopt($ch, CURLOPT_COOKIE, $cookie);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
$re=curl_exec($ch);
curl_close($ch);

echo $re;


?>

注意几点:1.获取认证成功后的cookie 2.发送cookie字符串用curl 的参数 CURLOPT_COOKIE,而不是发送cookie文件地址的CURLOPT_COOKIEFILE

这提醒了我,以前的学习都是浅尝则止,只要实现了功能就满足了,没有深入思考如何使效率更高,代码可重用性。。
多思考,精益求精。

你可能感兴趣的:(php)