请选择 进入手机版 | 继续访问电脑版
开启左侧

PHP网络爬虫之CURL学习

[复制链接]
PHP的CURL

php的curl能够完成模仿http的各类恳求,那也是php做收集爬虫的根底,也多用于接心api的挪用。
那个时分有人便要提问了:为何您特么不消file_get_contents?
curl的机能比它好,并且能够完成更多庞大的操纵,不单单只是获得页里数据。
上面先别离引见一些经常使用的函数。

  • curl_init 初初化一个curl对话
  • curl_setopt 设置curl参数,即传输选项
  • curl_exec 施行恳求
  • curl_close 封闭一个curl对话
次要是上里四个

  • curl_errno 返回最初一次毛病码,php曾经界说了诸多毛病列举编码
  • curl_errror 返回一个庇护当前会话近来一次毛病的字符串
上面间接上真例吧,相干注释皆正在正文内里
1. 正在收集高低载一个网页并把内乱容中的“百度”交换为“屌丝”以后输出
12345678910112. 经由过程挪用WebService查询北京确当前气候
1234567891011121314151617181920212223243. 模仿需求登录的网址并抓与网页的内乱容
12345678910111213141516171819202122232425262728293031324. 登录网站的疑息抓与并下载小我私家空间页里 + 自界说完成页里链接跳转抓与
= $curl_max_loops)  {  $curl_loops = 0;  return FALSE;  }  curl_setopt($ch, CURLOPT_HEADER, true); // 开启header才气够抓与到重定背到的新URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  $data = curl_exec($ch);  // 朋分返回的内乱容 $h_len = curl_getinfo($ch, CURLINFO_HEADER_SIZE);  $header = substr($data,0,$h_len); $data = substr($data,$h_len - 1); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  if ($http_code == 301 || $http_code == 302) {  $matches = array();  preg_match('/Location:(.*?)\n/', $header, $matches);  $url = @parse_url(trim(array_pop($matches)));  // print_r($url);  if (!$url)  {  //couldn't process the url to redirect to  $curl_loops = 0;  return $data;  }  $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));  if (!isset($url['scheme']))  $url['scheme'] = $last_url['scheme'];  if (!isset($url['host']))  $url['host'] = $last_url['host'];  if (!isset($url['path']))  $url['path'] = $last_url['path']; $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . (isset($url['query'])?'?'.$url['query']:'');  curl_setopt($ch, CURLOPT_URL, $new_url);  return curl_redir_exec($ch);  } else {  $curl_loops=0;  return $data;  } } ?>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283从FTP效劳器下载一个文件到当地
1234567891011121314151617181920212223242526276.下载收集上里的一个HTTPS的资本
1234567891011121314151617本死PHP模仿http恳求

偶然候为了简朴模仿一个http恳求,如许便来用curl有面华侈,实在php本身曾经能够完成那个功用,
需求正在效劳器端模仿 POST/GET 等恳求,也便是正在 PHP 法式中来完成模仿,改怎样做到呢?大概道,正在 PHP 法式里,给您一个数组,怎样将那个数组 POST/GET 到别的一个地点呢?固然,利用 CURL 很简单办到,那末假如没有利用 CURL 库,又该怎样办呢?实在,正在 PHP 里曾经有相干的函数完成了,那个函数便是接下去要讲的 stream_context_create()。
间接 show you the code,那是最好的办法:
$data = array( 'foo'=>'bar',  'baz'=>'boom',  'site'=>'www.nowamagic.net',  'name'=>'nowa magic'); $data = http_build_query($data); //$postdata = http_build_query($data);$options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $data //'timeout' => 60 * 60 // 超不时间(单元:s) ));$url = "http://www.nowamagic.net/test2.php";$context = stream_context_create($options);$result = file_get_contents($url, false, $context);echo $result;http://www.nowamagic.net/test2.php 的代码为:$data = $_POST;echo '';print_r( $data );echo '';123456789101112131415161718192021222324252627282930运转成果为:
Array( [foo] => bar [baz] => boom [site] => www.nowamagic.net [name] => nowa magic)1234567一些要面解说:

  • 以上法式用到了 http_build_query() 函数,机关URL字符串。
  • stream_context_create() 是用去创立翻开文件的高低文件选项的,好比用POST会见,利用代办署理,收收header等。便是 创立一个流,再举一个例子吧:
$context = stream_context_create(array(  'http' => array(  'method' => 'POST',  'header' => sprintf("Authorization: Basic %s\r\n", base64_encode($username.':'.$password)).  "Content-type: application/x-www-form-urlencoded\r\n",  'content' => http_build_query(array('status' => $message)),  'timeout' => 5,  ), )); $ret = file_get_contents('http://twitter.com/statuses/update.xml', false, $context); 12345678910

  • stream_context_create创立的高低文选项便可用于流(stream),也可用于文件体系(file system)。关于像 file_get_contents、file_put_contents、readfile间接利用文件名操纵而出有文件句柄的函数来讲更有效。stream_context_create增长header头只是一部分功用,借能够界说代办署理、超时等。那使得会见web的功用没有强于curl。
  • stream_context_create() 感化:创立并返回一个文本数据流并使用各类选项,可用于fopen(),file_get_contents()等历程的超时设置、代办署理效劳器、恳求方法、头疑息设置的特别历程。
  • stream_context_create 借能经由过程增长 timeout 选项处理file_get_contents超时处置:
$opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>60, ));//创立数据流高低文$context = stream_context_create($opts);$html =file_get_contents('http://www.nowamagic.net', false, $context);//fopen输出文件指针处的一切盈余数据://fpassthru($fp); //fclose()前利用<div class="pgc-img">
PHP收集爬虫之CURL进修3 做者:倒数¢恋人节 帖子ID:5328



上一篇:PHP的简单计算器,想学习简单编程的同学可以关注,手把手教学 ...
下一篇:Java程序员月薪达到两万,技术水平需要达到什么程度? ...
回复

使用道具 举报

精彩评论10

狂飙摩托 发表于 7 天前 | 显示全部楼层
整理下排版吧,真乱
回复

使用道具 举报

闲不住a 发表于 7 天前 | 显示全部楼层
写的真的很不错
回复

使用道具 举报

dreamxyp@56.com 发表于 7 天前 | 显示全部楼层
看帖回帖是美德!PHP网络爬虫之CURL学习84 作者:dreamxyp@56.com 帖子ID:5328
回复

使用道具 举报

aHNtCqDM 发表于 7 天前 | 显示全部楼层
相当不错,感谢无私分享精神!
回复

使用道具 举报

daomei 发表于 7 天前 | 显示全部楼层
学习了,不错,讲的太有道理了
回复

使用道具 举报

静静的读你 发表于 7 天前 | 显示全部楼层
不错,支持下楼主
回复

使用道具 举报

静静的读你 发表于 7 天前 | 显示全部楼层
不错不错,楼主您辛苦了。。。
回复

使用道具 举报

静静的读你 发表于 7 天前 | 显示全部楼层
不错不错,很好哦
回复

使用道具 举报

爱上阿南 发表于 7 天前 | 显示全部楼层
PHP网络爬虫之CURL学习73 作者:爱上阿南 帖子ID:5328不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子172

发布主题
推荐阅读 更多
阅读排行 更多
广告位

技术技术

客服客服

投诉投诉

举报举报


联系邮箱:
jdyweb@163.com
微信扫一扫
关注“筋斗云论坛”公众号
17621938886
周一至周五 9:00-18:00
意见反馈:jdyweb@163.com
关于我们

扫一扫关注我们

Powered by 筋斗云网络 X3.3© 2016-2018 Comsenz Inc. |appname