本文实例讲述了PHP模拟http请求的方法。分享给大家供大家参考,具体如下:
方法一:利用php的socket编程来直接给接口发送数据来模拟post的操作。
建立两个文件post.php,getpost.php
post.php内容如下:
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
$flag = 0;
$params = '' ;
$errno = '' ;
$errstr = '' ;
//要post的数据
$argv = array (
'var1' => 'abc' ,
'var2' => 'how are you , my friend??' );
//构造要post的字符串
foreach ( $argv as $key => $value ) {
if ( $flag !=0) {
$params .= "&" ;
$flag = 1;
}
$params .= $key . "=" ; $params .= urlencode( $value );
$flag = 1;
}
$length = strlen ( $params );
//创建socket连接
$fp = fsockopen ( "localhost" ,81, $errno , $errstr ,10) or exit ( $errstr . "--->" . $errno );
//构造post请求的头
$header = "POST /flandy/getpost.php HTTP/1.1\r\n" ;
$header .= "Host:127.0.0.1\r\n" ;
$header .= "Referer:/flandy/post.php\r\n" ;
$header .= "Content-Type: application/x-www-form-urlencoded\r\n" ;
$header .= "Content-Length: " . $length . "\r\n" ;
$header .= "Connection: Close\r\n\r\n" ;
//添加post的字符串
$header .= $params . "\r\n" ;
//发送post的数据
fputs ( $fp , $header );
$inheader = 1;
while (! feof ( $fp )) {
$line = fgets ( $fp ,1024); //去除请求包的头只显示页面的返回数据
if ( $inheader && ( $line == "\n" || $line == "\r\n" )) {
$inheader = 0;
}
if ( $inheader == 0) {
echo $line ;
}
}
fclose( $fp );
?>
|
getpost.php的内容如下:
1
2
3
4
5
6
|
<?php
echo "this is the data posted" ;
echo "<pre>" ;
print_r( $_REQUEST );
echo "</pre>" ;
?>
|
结果输出:
1
2
3
4
5
6
|
this is the data posted
Array
(
[var1] => abc
[var2] => how are you , my friend??
)
|
以上代码在本机81端口下已经通过测试。
方法二:使用PHP的curl扩展或HttpClient.class.php类,这两个非常类似,下面简单的列出curl的实现代码。
两个文件post2.php和getpost2.php
post2.php的内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
$psecode = 'NDE005' ;
$website = 'www.baidu.com' ;
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = "http://localhost:81/flandy/getpost2.php?web=" . $website .
"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .
"&amt=" . $amt ;
curl_setopt( $ch , CURLOPT_URL, $curl_url );
curl_setopt( $ch , CURLOPT_POST, 1);
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //不直接输出,返回到变量
$curl_result = curl_exec( $ch );
$result = explode ( ',' , $curl_result );
curl_close( $ch );
print_r( $result );
?>
|
getpost2.php的内容如下:
1
2
3
4
5
6
|
<?php
echo "returndata<br>" ;
echo "<pre>" ;
print_r( $_REQUEST );
echo "</pre>" ;
?>
|
结果输出:
1
2
3
4
5
6
7
8
9
10
|
Array ( [0] => returndata
Array
(
[web] => 'wwwbaiducom'
[pwd] => 123456
[action] => check
[pseid] => 'NDE005'
[amt] => 1
)
)
|
方法三:这个要借助第三方类库HttpClient
可以到这里下载:http://scripts.incutio.com/httpclient/
或者点击此处本站下载。
1
2
3
4
5
6
7
8
9
10
11
|
<?php
require_once 'HttpClient.class.php' ;
$params = array ( 'web' => 'www.baidu.com' ,
'pwd' => '123456' ,
'action' => 'check' ,
'pseid' => 'NDE005' ,
'amt' => 1);
$pageContents = HttpClient::quickPost( 'http://localhost:81/flandy/getpost3.php' , $params );
$result = explode ( ',' , $pageContents );
print_r( $result );
?>
|
希望本文所述对大家PHP程序设计有所帮助。