PHP curl_init函数——爬虫必备

PHP curl_init函数——爬虫必备原文地址:http://www.jb51.net/article/25193.htm我们可以使用PHP的扩展库-Curl,这个扩展库通常是默认在安装包中的,你可以它来获取其他站点的内容,也可以来干别的。 备注:这两段代码需要php_curl扩展库的支持,查看phpinfo(),如果curlsupport enabled则表示支持curl库。 1、Windows下的PHP开启curl库

大家好,又见面了,我是你们的朋友全栈君。

原文地址:http://www.jb51.net/article/25193.htm

我们可以使用PHP的扩展库-Curl,这个扩展库通常是默认在安装包中的,你可以它来获取其他站点的内容,也可以来干别的。 

备注:这两段代码需要php_curl扩展库的支持,查看phpinfo(),如果curl support enabled则表示支持curl库。 


1、Windows下的PHP开启curl库支持: 


打开php.ini,将extension=php_curl.dll前的;号去掉。 


2、Linux下的PHP开启curl库支持: 


编译PHP时在./configure后加上 –with-curl 


在这篇文章中,我们一起来看看如何使用curl库,并看看它的其他用处,但是接下来,我们要从最基本的用法开始 


基本用法: 


第一步,我们通过函数curl_init()创建一个新的curl会话,代码如下: 


// create a new curl resource 


$ch = curl_init(); 


?> 


我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么接下的一步,传递一个URL给curl_setopt()函数,代码: 


// set URL and other appropriate options 


curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); 


?> 


做完上一步工作,curl的准备工作做完了,curl将会获取URL站点的内容,并打印出来。代码: 


// grab URL and pass it to the browser 


curl_exec($ch); 


?> 


最后,关闭当前的curl会话 


//close curl resource, and free up system resources 


curl_close($ch); 


?> 

下面我们来看看完成的实例代码: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); 
// grab URL and pass it to the browser 
curl_exec($ch); 
// close curl resource, and free up system resources 
curl_close($ch); 
?> 


我们刚刚把另外一个站点的内容,获取过来以后自动输出到浏览器,我们有没有其他的方式组织获取的信息,然后控制其输出的内容呢?完全没有问题,在curl_setopt()函数的参数中,如果希望获得内容但不输出,使用 CURLOPT_RETURNTRANSFER参数,并设为非0值/true!,完整代码请看: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
// grab URL, and return output 
$output = curl_exec($ch); 
// close curl resource, and free up system resources 
curl_close($ch); 
// Replace ‘Google' with ‘PHPit' 
$output = str_replace('Google', ‘PHPit', $output); 
// Print output 
echo $output; 
?> 

在上面的2个实例中,你可能注意到通过设置函数curl_setopt()的不同参数,可以获得不同结果,这正是curl强大的原因,下面我们来看看这些参数的含义。 


CURL的相关选项: 


如果你看过php手册中的curl_setopt()函数,你可以注意到了,它下面长长的参数列表,我们不可能一一介绍,更多的内容请查看PHP手册,这里只介绍常用的和有的一些参数。 

第一个很有意思的参数是 CURLOPT_FOLLOWLOCATION ,当你把这个参数设置为true时,curl会根据任何重定向命令更深层次的获取转向路径,举个例子:当你尝试获取一个PHP的页面,然后这个PHP的页面中有一段跳转代码 ,curl将从http://new_url获取内容,而不是返回跳转代码。完整的代码如下: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
// grab URL, and print 
curl_exec($ch); 
?> 

如果Google发送一个转向请求,上面的例子将根据跳转的网址继续获取内容,和这个参数有关的两个选项是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER . 


参数CURLOPT_MAXREDIRS选项允许你定义跳转请求的最大次数,超过了这个次数将不再获取其内容。如果CURLOPT_AUTOREFERER 设置为true时,curl会自动添加Referer header在每一个跳转链接,可能它不是很重要,但是在一定的案例中却非常的有用。 


下一步介绍的参数是CURLOPT_POST,这是一个非常有用的功能,因为它可以让您这样做POST请求,而不是GET请求,这实际上意味着你可以提交 

其他形式的页面,无须其实在表单中填入。下面的例子表明我的意思: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”); 
// Do a POST 
$data = array('name' => ‘Dennis', 'surname' => ‘Pallett'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
// grab URL, and print 
curl_exec($ch); 
?> 
And the handle_form.php file: 
echo ‘Form variables I received:'; 
echo ‘'; 
print_r ($_POST); 
echo ‘'; 
?> 

正如你可以看到,这使得它真的很容易提交形式,这是一个伟大的方式来测试您的所有形式,而不以填补他们在所有的时间。 


参数CURLOPT_CONNECTTIMEOUT 通常用来设置curl尝试请求链接的时间,这是一个非常重要的选项,如果你把这段时间设置的太短了,可能会导致curl请求失败。 


但是如果你把它设置的时间太长了,可能PHP脚本将死掉。和这个参数相关的一个选项是 CURLOPT_TIMEOUT,这是用来设置curl允许执行的时间需求。如果您设置这一个很小的值,它可能会导下载的网页上是不完整的,因为他们需要一段时间才能下载。 

最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求是的客户端名称,比如webspilder或是IE6.0.示例代码如下: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://sc.jb51.net/”); 
curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
// grab URL, and print 
curl_exec($ch); 
?> 

现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。 


获取页面的信息: 

函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://www.google.com”); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FILETIME, true); 
// grab URL 
$output = curl_exec($ch); 
// Print info 
echo ‘'; 
print_r (curl_getinfo($ch)); 
echo ‘'; 
?> 

大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。 


那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。 


实际用途: 

curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子: 

// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
// grab URL 
$output = curl_exec($ch); 
// Get response code 
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
// Not found? 
if ($response_code == ‘404′) { 
echo ‘Page doesn\'t exist'; 
} else { 
echo $output; 
} 
?> 

其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158132.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • cxf实现webservice_产品框架

    cxf实现webservice_产品框架1.WebService与CXF简介1.1WebServiceWebService是一种跨编程语言和跨操作系统平台的远程调用技术。跨编程语言和跨操作平台就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。远程调用就是一台计算机a上的…

  • 大数据架构之– Lambda架构「建议收藏」

    大数据架构之– Lambda架构「建议收藏」一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数据时,同时发挥流处理和批处理的优势。通过批处理提供全面、准确的数据,通过流处理提供低延迟的数据,从而达到平衡延迟、吞吐量和容错性的目的。为了满足下游的即席查询,批处理和流处理的结果会进行合并。二、Lambda架构组成Lambda架构包含三层,BatchLayer、SpeedLayer和ServingLayer。架.

  • pycharm 安装包总失败原因及解决办法「建议收藏」

    pycharm 安装包总失败原因及解决办法「建议收藏」对于pycharm安装包失败的原因借解决办法在pycharm中安装包安装失败:Non-zeroexitcode(1)可能是在库中找不到对应版本。解决:cmd中使用命令:pipinstall包名-ihttps://pypi.douban.com/simple另一种总是安装失败,也有可能是pip版本过低。更新pip,在pycharm->setting->ProjectInterpreter进行升级。如果pip总是更新失败,可以重装anaconda。(我是用anaconda解

  • WebApp开发-Google官方教程

    WebApp开发-Google官方教程概览你可以使用viewport的元数据、CSS和Javascript来为不同分辨率的屏幕设置合适的页面本文档中的技术适用于Android 2.0及以上设备,针对默认的Android Browser中及在WebView中呈现的页面如果你在为Android开发Web应用或者在为移动设备重新设计一个Web应用,你需要仔细考虑在不同设备上你的页面看起来是怎样的。因为Android设备有不同款型

  • 2g内存能用的安卓模拟器_逍遥模拟器卡顿怎么解决

    2g内存能用的安卓模拟器_逍遥模拟器卡顿怎么解决现在安卓模拟器作为安卓文件在电脑上运行的辅助工具,使用率非常高,不过有一些用户表示自己的电脑配置比较低,使用一些较为热门的模拟器可能会比较卡,不好用,那么下面小编就为大家推荐一番。安卓模拟器低配置版哪个好1、叶子猪手游模拟器叶子猪手游模拟器资源下载版本名称下载地址叶子猪模拟器官方最新版叶子猪手游模拟器下载首先我们将来说说叶子猪手游模拟器,相信喜欢玩游戏的小伙伴都知道,它稳定兼容99%以上硬件…

  • python vimrc[通俗易懂]

    python vimrc[通俗易懂]全局:在/etc/vim/vimrc中添加 本地:~/.vimrcsetfileencodings=utf-8,gbksetambiwidth=double“支持中文setsmartindentsetsmarttabsetexpandtabsettabstop=4setsofttabstop=4setshiftwidth=

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号