使用PHP curl模拟浏览器抓取网站信息


Posted in PHP onOctober 28, 2013

官方解释
curl是一个利用URL语法在命令行方式下工作的文件传输工具。curl是一个利用URL语法在命令行方式下工作的文件传输工具。
它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,
上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

curl讲解一

PHP中curl函数应用
简单的来说一共四步
curl_init();
curl_setopt();
curl_exec();
curl_close();

最重要的命令就是 curl_setopt();

一个简单的post请求例子
index.php

<?php
$url = "http://www.mytest.com/curl/login.php";  //请求的url地址
$user = "zkg111"; //用户名
$pass = "123456"; 
$postdata = "user_name=".$user."&password=".$pass;  //请求的数据,以 & 符号分割
$curl = curl_init(); //开启curl
curl_setopt($curl, CURLOPT_URL, $url); //设置请求地址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  //是否输出 1 or true 是不输出 0  or false输出
curl_setopt($curl, CURLOPT_POST, 1); //是否使用post方法请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);  //post数据 
echo $data = curl_exec($curl); //执行curl操作
curl_close($curl);
?>

 下面一个简单的例子,我随便打开了兄弟连的论坛,接着就模拟了一下兄弟连论坛的登陆,如果需要发帖的话原理都是一样的,转接页面,提交数据
特别注意的是cookie的保存目录 windows7下面必须是在./temp目录下,开始我自己创建了一个新文件夹,发现存是对的,但是cookie读取的时候不对,为此还在好多地方
提问,但是没有回答对的,折腾了好几天该了保存文件为./temp目录下才可以的,提醒别的朋友别和我一样瞎转
<?php
$url = "http://bbs.lampbrother.net/login.php";
$urls = "http://bbs.lampbrother.net";
$lgt = 0;
$user = "XXXX";
$pass = "XXXX";
$question = 0;
$hideid = 1;
 $cookie_file    =    tempnam('./temp','cookie');
 $postdata = "forward=&jumpurl=".$urls."&step=2&lgt=".$lgt."&pwuser=".$user."&pwpwd=".$pass."&question=".$question."&answer=&hideid=".$hideid;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 $data = curl_exec($ch);
curl_close($ch);
 //echo $data;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://bbs.lampbrother.net/');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_exec($ch);
curl_close($ch);
?>
PHP 相关文章推荐
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP+AJAX实现投票功能的方法
Sep 28 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
php实现留言板功能
Mar 05 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
PHP实现简单登录界面
Oct 23 PHP
php header功能的使用
Oct 28 #PHP
简单实用的.net DataTable导出Execl
Oct 28 #PHP
php json与xml序列化/反序列化
Oct 28 #PHP
php中的boolean(布尔)类型详解
Oct 28 #PHP
php中的比较运算符详解
Oct 28 #PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 #PHP
析构函数与php的垃圾回收机制详解
Oct 28 #PHP
You might like
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
js数组的操作指南
2014/12/28 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
简述vue中的config配置
2018/01/23 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
Python创建系统目录的方法
2015/03/11 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
《掌声》教学反思
2014/02/23 职场文书
工程索赔意向书
2014/08/30 职场文书
布达拉宫的导游词
2015/02/02 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
Python3 类型标注支持操作
2021/06/02 Python