方法1: 用file_get_contents以get方式获取内容

<?php

$url='http://www.domain.com/?para=123';

$html= file_get_contents($url);

echo$html;

?>

方法2:用file_get_contents函数,以post方式获取url

<?php

$url= 'http://www.domain.com/test.php?id=123';

$data= array('foo'=> 'bar');

$data= http_build_query($data);

$opts= array(

'http'=> array(

   'method'=> 'POST',

   'header'=>"Content-type: application/x-www-form-urlencoded\r\n"  .

                     "Content-Length: "  . strlen($data) . "\r\n",

   'content'=> $data

)

);

$ctx= stream_context_create($opts);

$html= @file_get_contents($url,'',$ctx);

如果需要再传递cookie数据,则把

'header'=>"Content-type: application/x-www-form-urlencoded\r\n"  .

                  "Content-Length: "  . strlen($data) . "\r\n",

修改为

'header'=>"Content-type: application/x-www-form-urlencoded\r\n"  .

                 "Content-Length: "  . strlen($data) . "\r\n".

                 "cookie:cookie1=c1;cookie2=c2\r\n";

即可

方法3: 用fopen打开url, 以get方式获取内容

<?php

$fp= fopen($url,'r');

$header= stream_get_meta_data($fp);//获取报头信息

while(!feof($fp)) {

$result.= fgets($fp, 1024);

}

echo"url header: {$header} <br>":

echo"url body: $result";

fclose($fp);

?>

方法4: 用fopen打开url, 以post方式获取内容

<?php

$data= array('foo2'=> 'bar2','foo3'=>'bar3');

$data= http_build_query($data);

$opts= array(

'http'=> array(

'method'=> 'POST',

'header'=>"Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n"  .

"Content-Length: "  . strlen($data) . "\r\n",

'content'=> $data

)

);

$context= stream_context_create($opts);

$html= fopen('http://www.test.com/zzzz.php?id=i3&id2=i4','rb',false, $context);

$w=fread($html,1024);

echo$w;

?>

方法5:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body

<?php

functionget_url ($url,$cookie=false)

{

$url= parse_url($url);

$query= $url[path]."?".$url[query];

echo"Query:".$query;

$fp= fsockopen($url[host],$url[port]?$url[port]:80 , $errno,$errstr, 30);

if(!$fp) {

returnfalse;

}else{

$request= "GET $query HTTP/1.1\r\n";

$request.= "Host: $url[host]\r\n";

$request.= "Connection: Close\r\n";

if($cookie)$request.="Cookie:   $cookie\n";

$request.="\r\n";

fwrite($fp,$request);

while(!@feof($fp)) {

$result.= @fgets($fp, 1024);

}

fclose($fp);

return$result;

}

}

//获取url的html部分,去掉header

functionGetUrlHTML($url,$cookie=false)

{

$rowdata= get_url($url,$cookie);

if($rowdata)

{

$body=stristr($rowdata,"\r\n\r\n");

$body=substr($body,4,strlen($body));

return$body;

}

   returnfalse;

}

?>

方法6:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

<?php

functionHTTP_Post($URL,$data,$cookie,$referrer="")

{

   // parsing the given URL

$URL_Info=parse_url($URL);

   // Building referrer

if($referrer=="")// if not given use this script as referrer

$referrer="111";

   // making string from $data

foreach($dataas
$key=>$value) $values[]="$key=".urlencode($value); $data_string=implode("&",$values); // Find out which port is needed - if not given use standard (=80) if(!isset($URL_Info["port"])) $URL_Info["port"]=80; // building POST-request: $request.="POST ".$URL_Info["path"]." HTTP/1.1\n"; $request.="Host: ".$URL_Info["host"]."\n"; $request.="Referer: $referer\n"; $request.="Content-type: application/x-www-form-urlencoded\n"; $request.="Content-length: ".strlen($data_string)."\n"; $request.="Connection: close\n"; $request.="Cookie: $cookie\n"; $request.="\n"; $request.=$data_string."\n"; $fp= fsockopen($URL_Info["host"],$URL_Info["port"]); fputs($fp,$request); while(!feof($fp)) { $result.= fgets($fp, 1024); } fclose($fp); return$result; } ?> 方法7:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展 <?php $ch= curl_init(); $timeout= 5; curl_setopt ($ch, CURLOPT_URL, 'http://www.domain.com/'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents= curl_exec($ch); curl_close($ch); echo$file_contents; ?>

  

 

这里收集了3种利用php获得网页源代码抓取网页内容的方法,我们可以根据实际需要选用。

1、使用file_get_contents获得网页源代码

这个方法最常用,只需要两行代码即可,非常简单方便。

参考代码:

  • <?php
  • $fh= file_get_contents('http://www.webkaka.com/');
  • echo $fh;
  • ?>

2、使用fopen获得网页源代码

这个方法用的人也不少,不过代码有点多。

参考代码:

  • <?php
  • $fh = fopen('http://www.webkaka.com/', 'r');
  • if($fh){
  • while(!feof($fh)) {
  • echo fgets($fh);
  • }
  • }
  • ?>

3、使用curl获得网页源代码

 

使用curl获得网页源代码的做法,往往是需要更高要求的人使用,例如当你需要在抓取网页内容的同时,得到网页header信息,还有ENCODING编码的使用,USERAGENT的使用等等。

参考代码一:

  • <?php
  • // 创建一个新cURL资源
  • $ch = curl_init();
  • // 设置URL和相应的选项
  • curl_setopt($ch, CURLOPT_URL, "http://www.webkaka.com/");
  • curl_setopt($ch, CURLOPT_HEADER, false);
  • // 抓取URL并把它传递给浏览器
  • $data = curl_exec($ch);
  • echo $data;
  • //关闭cURL资源,并且释放系统资源
  • curl_close($ch);
  • ?>

参考代码二:

  • <?php
  • $szUrl = "http://www.webkaka.com/";
  • $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
  • $curl = curl_init();
  • curl_setopt($curl, CURLOPT_URL, $szUrl);
  • curl_setopt($curl, CURLOPT_HEADER, 0);  //0表示不输出Header,1表示输出
  • curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  • curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  • curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  • curl_setopt($curl, CURLOPT_ENCODING, '');
  • curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
  • curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  • $data = curl_exec($curl);
  • echo $data;
  • //echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息

PHP获取网页内容的几种方法的更多相关文章

  1. c#获取网页内容的三种方法

    1.webclient WebClient wc = new WebClient(); Stream stm = wc.OpenRead(str_url); StreamReader sr = new ...

  2. PHP中获取星期的几种方法

    PHP中获取星期的几种方法   PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...

  3. VC++获取IDC_EDIT的7种方法

    VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, num ...

  4. C#获取当前路径的7种方法

    总结C#获取当前路径的7种方法 C#获取当前路径的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName ...

  5. Java获取随机数的几种方法

    Java获取随机数的几种方法 .使用org.apache.commons.lang.RandomStringUtils.randomAlphanumeric()取数字字母随机10位; //取得一个3位 ...

  6. spring 获取 WebApplicationContext的几种方法

    spring 获取 WebApplicationContext的几种方法 使用ContextLoader WebApplicationContext webApplicationContext = C ...

  7. Struts2 后台获取路径的几种方法

    Struts2 后台获取路径的几种方法 package actions.app; import java.io.File; import org.apache.struts2.ServletActio ...

  8. VC获取cookies的几种方法

    方法一: CInternetSession::GetCookie This member function implements the behavior of the Win32 function  ...

  9. 体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装

    今天开始了体温上传程序的开发 今日所学: 获取时间 (21条消息) (转)安卓获取时间的三种方法_sharpeha的博客-CSDN博客_安卓获取时间 DB Browser安装教程 (20条消息) sq ...

随机推荐

  1. spark exectors的启动总结

    在spark启动之后,worker和master注册通信之后,在进入用户提交app中,new SparkContext之后就会在worker上分配exectors了. 首先在sparkContext中 ...

  2. Django项目中关于redis包版本的坑

    1.环境 python:3.6 django:1.11.8 redis:3.2.1 2.遇到的问题 报错:redis.exceptions.DataError: Invalid input of ty ...

  3. 472. Concatenated Words

    class Solution { public: vector<string> res; vector<string> findAllConcatenatedWordsInAD ...

  4. 企业SVN版本管理与代码上线方案

    1.SVN服务实战 1) 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Sv ...

  5. C++编译错误杂记

    目录 2018年12月23日 error: no matching function for call to ××× 2018年12月10日 error: expected ')' before '* ...

  6. vim 粘贴文本,格式混乱 tab

    粘贴的代码如上.修改方法: 方法一: set paste 贴完后,设置 set nopaste 恢复代码缩进. 方法二:修改配置文件 vim /etc/vim/vimrc set pastetoggl ...

  7. Fedora 下面安装FTP服务

    1. yum install vsftpd 2. systemctl disable vsftpd.service 3. systemctl stop vsftpd.service 4. system ...

  8. pix2code开发笔记

    1.软件安装 首先需要安装Python3和pip (1) Python3 环境搭建 Window 平台安装 Python:  https://www.python.org/downloads/wind ...

  9. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...

  10. 20145234黄斐《Java程序设计》第一周学习总结

    教材学习内容总结 1.java是SUN公司推出的面相网络的编程语言,当时取名Oak,后改名Java. 2.Java三大平台分别为:Java SE.Java EE与Java ME. 3.Java不仅是程 ...