您的位置:首页 > 其它

curl 模拟登陆

2016-04-30 08:20 357 查看
在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如file_get_contents)就无法做到了,我们可以利用PHP的CURL扩展库来进行模拟登录,下面给出代码示例:

<?php

$cookie_path
= './';
//设置cookie保存路径

//-----登录要提交的表单数据---------------
$vars['username']
= '张三';

$vars['pwd']
= '123';

//-------------------------------------

$method_post
= true;
//登录提交的url地址(表单中的action的绝对地址)

$url
= 'http://****.com/login';
//----------------------------

$ch =
curl_init();

$params[CURLOPT_URL]
= $url; //请求url地址
$params[CURLOPT_HEADER]
= true;
//是否返回响应头信息

$params[CURLOPT_RETURNTRANSFER]
= true;
//是否将结果返回
$params[CURLOPT_FOLLOWLOCATION]
= true;
//是否重定向

$params[CURLOPT_USERAGENT]
= 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';

$postfields
= '';
foreach
($vars
as $key
=>
$value){

$postfields
.=
urlencode($key)
. '='
. urlencode($value)
. '&';
}

$params[CURLOPT_POST]
= true;

$params[CURLOPT_POSTFIELDS]
= $postfields;

//判断是否有cookie,有的话直接使用
if
(isset($_COOKIE['cookie_jar'])
&& ($_COOKIE['cookie_jar']
|| is_file($_COOKIE['cookie_jar'])))

{
$params[CURLOPT_COOKIEFILE]
= $_COOKIE['cookie_jar'];
//这里判断cookie

}
else

{
$cookie_jar
= tempnam($cookie_path,
'cookie');
//产生一个cookie文件

$params[CURLOPT_COOKIEJAR]
= $cookie_jar;
//写入cookie信息
setcookie('cookie_jar',
$cookie_jar);
//保存cookie路径

}
curl_setopt_array($ch,
$params);
//传入curl参数

$content
= curl_exec($ch);
//执行

echo
'
';

echo
$content;
//输出登录结果
/*

//---------登录成功后再次请求其他地址,如果有多个可以循环执行---------
echo '

';
$nexturl = 'http://****.com/test';

$params[CURLOPT_URL] = $nexturl;
$params[CURLOPT_POSTFIELDS] = '';

curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行

echo $content; //输出请求结果
//-------------------------------------------------

*/
curl_close($ch);
//关闭连接

?>

注:如果遇到无法请求https站点的情况,可能是因为无法验证证书或者域名,只要在curl_setopt_array前增加以下两项就可以了:

PHP

$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;

1
2

$params[CURLOPT_SSL_VERIFYPEER]
= false;

$params[CURLOPT_SSL_VERIFYHOST]
= false;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: