文档章节

cURL、file_get_contents、snoopy.class.php 优缺点

Junn
 Junn
发布于 2013/07/29 01:14
字数 622
阅读 1977
收藏 10
点赞 0
评论 0

curl()、file_get_contents()、snoopy.class.php这三个远程页面抓取或采集中用到的工具,他们功能相当,到底有什么优缺点呢,下面逐一介绍:

snoopy.class.php

snoopy 是用 fsockopen 自开发的一个类,效率比较高且不需要服务器特定配置支持,在普通虚拟主机中即可使用,但是经常出问题。官方网址:http://sourceforge.net/projects

Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。
Snoopy的特点:
1、抓取网页的内容 fetch
2、抓取网页的文本内容 (去除HTML标签) fetchtext
3、抓取网页的链接,表单 fetchlinks fetchform
4、支持代理主机
5、支持基本的用户名/密码验证
6、支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
7、支持浏览器重定向,并能控制重定向深度
8、能把网页中的链接扩展成高质量的url(默认)
9、提交数据并且获取返回值
10、支持跟踪HTML框架
11、支持重定向的时候传递cookies
要求php4以上就可以了,由于本身是php一个类,无需扩支持,服务器不支持curl时候的最好选择。

file_get_contents()

file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,但是抓取成功率很高,所以在 snoopy 出问题的时候我一般那他来。5.0.0 添加了对 context 的支持,有了context,他也可以发送 header 信息,自定义用户 agent, referer, cookies 都不在话下。5.1.0 添加了 offset 和 maxlen 参数,可以只读文件的一部分内容。

curl()

功能最强大,几乎可以模拟浏览器的各个方面,几乎可以以假乱真。效率也很高,支持多线程,不过需要开启下 curl 扩展。

cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。PHP也支持cURL库,我们常常用来远程页面抓取和采集。

一些CMS会使用curl函数,这就需要在服务器开启CURL扩展,下面介绍具体的方法:

1、将PHP的ext目录下的三个文件:php_curl.dll、libeay32.dll和ssleay32.dll复制到系统system32目录中。

2、将php.ini中的
;extension=php_curl.dll 前面的分号去掉

3、重启IIS或Apache

4、测试代码

<?php
    //初始化
    $ch = curl_init();
    //设置选项,包括URL
    curl_setopt($ch,CURLOPT_URL,"www.abc.net");
    curl_setopt($ch,CURLOPT_HEADER,1);
    curl_exec($ch);
    curl_close($ch);
?>

© 著作权归作者所有

共有 人打赏支持
Junn
粉丝 145
博文 372
码字总数 288918
作品 0
海淀
高级程序员
php模拟登陆的两种实现方法分析

本文实例分析了php模拟登陆的实现方法。分享给大家供大家参考。具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网。具体实例代码如下: 1)使用snoopy模拟登陆...

开元中国2015 ⋅ 2015/04/28 ⋅ 1

php---需要判断远程URL是否有效

需要判断远程URL是否有效,远程url包括远程图片,网页,视频等等元素 解决办法: 使用PHP解决 使用filegetcontents函数,不过优缺点如果url无法访问,会出现终止程序问题 使用curl返回,然后...

durban ⋅ 2012/04/01 ⋅ 0

PHP读取远程文件的三种方法

1.filegetcontents PHP代码 $url = http://www.xxx.com/; $contents = filegetcontents($url); //如果出现中文乱码使用下面代码 //$getcontent = iconv(”gb2312″, “utf-8″,filegetconte......

刘赤龙 ⋅ 2010/06/08 ⋅ 0

php中 curl, fsockopen ,file_get_contents 三个函数 比较

赵永斌: 有些时候用filegetcontents()调用外部文件,容易超时报错。换成curl后就可以.具体原因不清楚 curl 效率比filegetcontents()和fsockopen()高一些,原因是CURL会自动对DNS信息进行缓存(...

lixiaokai2008 ⋅ 2013/09/26 ⋅ 8

淘宝api 处理对象和数组用到的自定义函数 以及 开发能用到的方法

function getXmlData ($strXml) { $pos1 = strpos($strXml, 'xml'); if ($pos1) { echo 'sddfdsf'; $xmlCode=simplexmlloadstring($strXml,'SimpleXMLElement', LIBXML_NOCDATA); $arrayCode......

李佳顺 ⋅ 2012/09/29 ⋅ 0

php下curl与file_get_contents性能对比

前言 php站点没什么访问量,但是负载又出奇的高,反馈给程序员一般就一个结果,代码没有问题,检查一下服务器是不是正常的,有些人就不停的处在扯皮时期了,何不查查问题. 好吧,我这有一例,...

小运 ⋅ 2013/08/28 ⋅ 1

PHP中fopen,file_get_contents,curl的区别

fopen /filegetcontents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询...

Surjur ⋅ 2014/09/10 ⋅ 0

file_get_content 和curl以及fopen 谁的效率最高

三个函数虽然都是读取资源的函数,但各自的应用场景不同。 curl多用于互联网网页之间的抓取,fopen多用于读取文件,而filegetcontents多用于获取静态页面的内容。 1. fopen /filegetcontent...

范思哲思考者 ⋅ 2014/09/18 ⋅ 0

PHP中获取远程文件的三种方法

1.filegetcontents <?php $url = 'http://www.xxx.com/';$contents = filegetcontents($url);//如果出现中文乱码使用下面代码//$getcontent = iconv(“gb2312″, “utf-8″,filegetcontents(......

slagga ⋅ 2016/10/27 ⋅ 0

file_get_contents伪造user_agent curl设置useragent的方法

filegetcontents 和 curl 这俩强悍的函数,在远程抓取时候相当有用处.不过一些网站会根据来访ip是否携带useragent来判断是正常的浏览器客户端还是机器.所以,我们的任务就是给他们伪造userage...

JK_OPERA ⋅ 2014/08/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 30分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 34分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 40分钟前 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 40分钟前 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 41分钟前 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

Java序列化和反序列化

1、什么是序列化和反序列化 序列化:把对象转换为字节序列的过程。 反序列化:把字节序列恢复成对象的过程。 2、被序列化的类需要实现serializable接口,只是为了标注该对象是可以被序列化的...

IT-Mamba ⋅ 今天 ⋅ 0

流式构建原理

流式构建需要达到分钟级的数据更新频率,Kylin采用类似于Spark Streaming的做法,每隔数分钟进行一次微构建。这边的构建需要考虑到一个延迟因素,分布式网络存在延迟等因素,该时间段的数据有...

无精疯 ⋅ 今天 ⋅ 0

在maven项目工程编写solr代码,需要的依赖

solrJ <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents<......

爱运动的小乌龟 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部