PHP获取网页内容的7种方法
方法1: 用
file_get_contents
以get方式获取内容
1 2 3 4 5 | <?php $url = 'http://www.domain.com/?para=123' ; $html = file_get_contents ( $url ); echo $html ; ?> |
方法2:用
file_get_contents
函数,以post方式获取url
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?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方式获取内容
1 2 3 4 5 6 7 8 9 10 | <?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方式获取内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?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默认支持CURL函数,你也可以看看新建一个php文件输入<?php phpinfo();?>访问查看是否支持
1 2 3 4 5 6 7 8 9 10 11 | <?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 ; ?> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库