PHP下打开URL地址的几种方法小结

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

  

复制代码 代码如下:

  <?php

  $url='http://www.baidu.com/';

  $html = file_get_contents($url);

  //print_r($http_response_header);

  ec($html);

  printhr();

  printarr($http_response_header);

  printhr();

  ?>

  示例代码2: 用fopen打开url, 以get方式获取内容

  

复制代码 代码如下:

  <?

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

  printarr(stream_get_meta_data($fp));

  printhr();

  while(!feof($fp)) {

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

  }

  echo "url body: $result";

  printhr();

  fclose($fp);

  ?>

  示例代码3:用file_get_contents函数,以post方式获取url

  

复制代码 代码如下:

  <?php

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

  $data = http_build_query($data);

  $opts = array (

  'http' => array (

  'method' => 'POST',

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

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

  'content' => $data

  ),

  );

  $context = stream_context_create($opts);

  $html = file_get_contents('http://localhost/e/admin/test.html', false, $context);

  echo $html;

  ?>

  示例代码4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body

  

复制代码 代码如下:

  <?

  function get_url ($url,$cookie=false) {

  $url = parse_url($url);

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

  ec("Query:".$query);

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

  if (!$fp) {

  return false;

  } else {

  $request = "GET $query HTTP/1.1";

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

  $request .= "Connection: Close";

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

  $request.="";

  fwrite($fp,$request);

  while(!@feof($fp)) {

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

  }

  fclose($fp);

  return $result;

  }

  }

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

  function GetUrlHTML($url,$cookie=false) {

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

  if($rowdata)

  {

  $body= stristr($rowdata,"");

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

  return $body;

  }

  return false;

  }

  ?>

  示例代码5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

  

复制代码 代码如下:

  <?

  function HTTP_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($data as $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;

  }

  printhr();

  ?>

  示例代码6:使用curl库,使用curl库之前,你可能需要查看一下php.ini,查看是否已经打开了curl扩展

  

复制代码 代码如下:

  <?

  $ch = curl_init();

  $timeout = 5;

  curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/');

  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  $file_contents = curl_exec($ch);

  curl_close($ch);

  echo $file_contents;

  ?>

  关于curl库:

  curl官方网站http://curl.haxx.se/

  curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧

  

复制代码 代码如下:

  <?

  function printarr(array $arr)

  {

  echo "<br> Row field count: ".count($arr)."<br>";

  foreach($arr as $key=>$value)

  {

  echo "$key=$value <br>";

  }

  }

  ?>

  7.

  有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。

  下面是file_get_contents和curl两个函数同样功能的不同写法

  file_get_contents函数的使用示例:

  

复制代码 代码如下:

  < ?php

  $file_contents = file_get_contents('http://www.ccvita.com/');

  echo $file_contents;

  ?>

  换成curl函数的使用示例:

  

复制代码 代码如下:

  < ?php

  $ch = curl_init();

  $timeout = 5;

  curl_setopt ($ch, CURLOPT_URL, 'http://www.ccvita.com');

  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  $file_contents = curl_exec($ch);

  curl_close($ch);

  echo $file_contents;

  ?>

  利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数

  

复制代码 代码如下:

  < ?php

  function vita_get_url_content($url) {

  if(function_exists('file_get_contents')) {

  $file_contents = file_get_contents($url);

  } else {

  $ch = curl_init();

  $timeout = 5;

  curl_setopt ($ch, CURLOPT_URL, $url);

  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  $file_contents = curl_exec($ch);

  curl_close($ch);

  }

  return $file_contents;

  }

  ?>

  其实上面的这个函数还有待商榷,如果你的主机服务商把file_get_contents和curl都关闭了,上面的函数就会出现错误。