php发送get、post请求的6种方法简明总结

本文介绍了六种不同的方法来获取网页的内容,包括使用file_get_contents以GET和POST方式请求,利用fopen和fsockopen函数进行GET和POST请求,以及通过curl库实现GET请求。这些方法覆盖了PHP中常见的网页抓取技术。
摘要由CSDN通过智能技术生成

 

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

?
1
2
3
4
5
<?php
$html = file_get_contents ( $url );
echo $html ;
?>

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

?
1
2
3
4
5
6
7
8
9
<?php
$fp = fopen ( $url , ‘r');
stream_get_meta_data( $fp );
while (! feof ( $fp )) {
$result .= fgets ( $fp , 1024);
}
echo “url body: $result ”;
fclose( $fp );
?>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$data = array (‘foo ' => ‘bar' );
$data = http_build_query( $data );
 
$opts = array (
‘http' => array (
‘method ' => ‘POST' ,
‘header'=> “Content-type: application/x-www-form-urlencodedrn” .
“Content-Length: ” . strlen ( $data ) . “rn”,
‘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,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启

?
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
function get_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 ) {
return false;
} else {
$request = “GET $query HTTP/1.1rn”;
$request .= “Host: $url [host]rn”;
$request .= “Connection: Closern”;
if ( $cookie ) $request .=”Cookie:  $cookien ”;
$request .=”rn”;
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 ,”rnrn”);
$body = substr ( $body ,4, strlen ( $body ));
return $body ;
}
 
return false;
}
?>

方法5:用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
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.1n”;
$request .=”Host: “. $URL_Info [ "host" ].”n”;
$request .=”Referer: $referern ”;
$request .=”Content-type: application/x-www-form-urlencodedn”;
$request .=”Content-length: “. strlen ( $data_string ).”n”;
$request .=”Connection: closen”;
 
$request .=”Cookie:  $cookien ”;
 
$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 ;
}
 
?>

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

?

1
2
3
4
5
6
7
8
9
10
11
<?php
$ch = curl_init();
$timeout = 5;
curl_setopt ( $ch , CURLOPT_URL, ‘http: //www.jb51.net/');
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT, $timeout );
$file_contents = curl_exec( $ch );
curl_close( $ch );
 
echo $file_contents ;
?>

 

转载于:https://www.cnblogs.com/mafeng/p/5599063.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值