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;
<?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; |
相关文章推荐
- NoSQL数据库技术
- 5-48 银行排队问题之单窗口“夹塞”版 (30分)
- C语言:关于程序运行时的内存管理
- Elasticsearch 聚合 - 时间数据处理(Looking at Time)
- Jetbrains IntelliJ IDEA破解方法
- Java类和对象及实例
- XML
- LeetCode 338. Counting Bits(统计比特数)
- 安装 phpredis 扩展
- bzoj3930 [CQOI2015]选数
- COGS 1834. [国家集训队2011]采矿
- Jquery之获取和设置元素内容
- 【JAVA实例】代码生成器的原理讲解以及实际使用
- 安卓手机与ROS通信遥控Gazebo中仿真机器人小车运动(ROS_indigo)
- 安卓手机与ROS通信遥控Gazebo中仿真机器人小车运动(ROS_indigo)
- 安卓手机与ROS通信遥控Gazebo中仿真机器人小车运动(ROS_indigo)
- 【JAVA实例】代码生成器的原理讲解以及实际使用
- 人生小梦---做回自己
- biee10g analyitcs 端口更改为80和重定向
- java mail 邮件创建--基本原理