php发送Http请求,抓取网页数据方法(cURL,file_get_contents,snoopy)

简介:

php发送Http请求,抓取网页数据方法(cURL,file_get_contents,snoopy)


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时候的最好选择。


附:

snoopy中文手册:http://wenku.baidu.com/view/a2110c2a192e45361066f53a.html

使用示例:http://outofmemory.cn/code-snippet/2480/php-usage-Snoopy-class-php-do-http-get-post-request

snoopy的缺陷与CURL的强大:http://www.neatstudio.com/show-1047-1.shtml



file_get_contents()


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


curl()


curl一般用来抓取网页,第二种就是get或者post数据,第三种应用就是实现PHP的多线程任务


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


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


也支持断点续传Range的代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ch  = curl_init();
curl_setopt( $ch , CURLOPT_URL,  'http://www.spiegel.de/' );
curl_setopt( $ch , CURLOPT_RANGE,  '0-500' );
curl_setopt( $ch , CURLOPT_BINARYTRANSFER, 1);
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
$result  = curl_exec( $ch );
curl_close( $ch );
echo  $result ;
/**
*But as noted before if the server doesn't honor this header but sends the whole file curl will download all of it. E.g. http://www.php.net ignores the header. But you can (in addition) set a write function callback and abort the request when more data is received, e.g.
* php 5.3+ only
* use function writefn($ch, $chunk) { ... } for earlier versions
*/
$writefn  function ( $ch $chunk ) {
   static  $data = '' ;
   static  $limit  = 500;  // 500 bytes, it's only a test
   $len  strlen ( $data ) +  strlen ( $chunk );
   if  ( $len  >=  $limit  ) {
     $data  .=  substr ( $chunk , 0,  $limit - strlen ( $data ));
     echo  strlen ( $data ) ,  ' ' $data ;
     return  -1;
   }
   $data  .=  $chunk ;
   return  strlen ( $chunk );
};
$ch  = curl_init();
curl_setopt( $ch , CURLOPT_URL,  'http://www.php.net/' );
curl_setopt( $ch , CURLOPT_RANGE,  '0-500' );
curl_setopt( $ch , CURLOPT_BINARYTRANSFER, 1);
curl_setopt( $ch , CURLOPT_WRITEFUNCTION,  $writefn );
$result  = curl_exec( $ch );
curl_close( $ch );


使用教程地址:

http://stackoverflow.com/questions/2032924/how-to-partially-download-a-remote-file-with-curl

http://cn2.php.net/manual/zh/ref.curl.php

http://www.360weboy.c      \

om/php/page1/curl.html



本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1371623,如需转载请自行联系原作者








相关文章
|
1天前
|
API Apache Android开发
对于Android的http请求的容错管理
对于Android的http请求的容错管理
|
2天前
|
JSON 数据格式 Python
Python 的 requests 库是一个强大的 HTTP 客户端库,用于发送各种类型的 HTTP 请求
`requests` 库是 Python 中用于HTTP请求的强大工具。要开始使用,需通过 `pip install requests` 进行安装。发送GET请求可使用 `requests.get(url)`,而POST请求则需结合 `json.dumps(data)` 以JSON格式发送数据。PUT和DELETE请求类似,分别调用 `requests.put()` 和 `requests.delete()`。
11 2
|
2天前
|
API
http代理ip请求并发数是什么?有什么用?
HTTP代理IP请求并发数指单个客户端对API或代理IP同时发起的请求数量,分为API链接请求并发和IP最大连接数。并发是瞬时同时请求,不同提供商限制不同。高并发请求的代理IP服务商能更好地应对程序压力。选择时应考虑这一因素。
|
3天前
|
Go
深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
|
安全 中间件
不安全的HTTP方法
检查原始测试响应的“Allow”头,并验证是否包含下列一个或多个不需要的选项:DELTE,SEARCE,COPY,MOVE,PROPFIND,PROPPATCH,MKCOL,LOCK,UNLOCK,PUT
630 0
不安全的HTTP方法
|
2月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
181 0
|
4天前
|
存储 算法 安全
[计算机网络]---Https协议
[计算机网络]---Https协议
|
11天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
12天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
12天前
|
网络协议 安全
【专栏】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议
【4月更文挑战第28天】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议。在处理大文件或慢速服务器时,设置超时参数至关重要。本文介绍了`curl`的超时参数,如`-m`(最大操作时间)、`-c`(连接超时)、`--dns-timeout`(DNS解析超时)和`-t`(时间条件)。通过示例展示了如何设置这些超时,并提到了一些高级技巧和注意事项,如错误处理和带宽限制。合理设置超时能提高效率和可靠性,对编写健壮的自动化脚本非常有用。