PHP获取网页内容的几种方法
首页 > 技术教程    作者:青书's   2020年7月20日 6:39 星期一   热度:198°   百度已收录  
时间:2020-7-20 6:39   热度:198° 
方法1: 用file_get_contents以get方式获取内容
<?php
  $url = 'https://www.baidu.com/s?wd=123';
  $html = file_get_contents($url);
  echo $html;
?>
方法2:用file_get_contents函数,以post方式获取url
<?php
  $url = 'https://www.baidu.com/s?wd=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
    )
  );

  //  如果需要再传递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";
  //  即可

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

  echo $html;
?>
方法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('https://www.baidu.com/s?wd=123','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;
  }
    return false;
  }
?>
方法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($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;
}
?>
方法7:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展
<?php
  $ch= curl_init();
  $timeout= 5;
  curl_setopt ($ch, CURLOPT_URL, 'https://www.baidu.com/s?wd=123');
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $file_contents = curl_exec($ch);
  curl_close($ch);
  ech o$file_contents;
?>

二维码加载中...
本文作者:青书's      文章标题: PHP获取网页内容的几种方法
本文地址:https://blog.i80k.com/jishu/16.html
版权声明:若无注明,本文皆为“青书's Blog”原创,转载请保留文章出处。
正文到此结束
返回顶部    博客首页    博客管理   会员注册   
Copyright © 2020 青书's Blog   粤ICP备19025138号