gpt4 book ai didi

PHP模拟post提交数据方法汇总

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP模拟post提交数据方法汇总由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的。下面我小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket.

第一种:file_get_contents来模拟post 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<php
 
function file_get_contents_post( $url , $post ){
$options = array (
‘http‘=> array (
‘method‘=>‘POST‘,
‘content‘=> http_build_query( $post ),
),
);
$result = file_get_contents ( $url ,false, stream_context_create( $options ));
return $result ;
}
$data = file_get_contents_post( "http://www.a.com/post/post.php" , array (‘name‘=>‘caiknife‘,‘email‘=>‘caiknife#gmail.com‘));
var_dump( $data );

第二种:curl模拟post 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<php
function curl_post( $url , $post ){
$options = array (
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_HEADER =>false,
CURLOPT_POST =>true,
CURLOPT_POSTFIELDS => $post ,
);
$ch = curl_init( $url );
curl_setopt_array( $ch , $options );
$result = curl_exec( $ch );
curl_close( $ch );
return $result ;
}
$data = curl_post( "http://www.a.com/post/post.php" , array (‘name‘=>‘caiknife‘,‘email‘=>‘caiknife#gmail.com‘));
var_dump( $data );

第三种:socket来模拟post 。

?
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
<php
function socket_post( $url , $post ){
$urls = parse_url ( $url );
if (!isset( $urls [‘port‘])){
$urls [‘port‘]=80;
}
$fp = fsockopen ( $urls [‘host‘], $urls [‘port‘], $errno , $errstr );
if (! $fp ){
echo "$errno, $errstr" ;
exit ();
}
$post = http_build_query( $post );
$length = strlen ( $post );
$header =<<<HEADER
<span class = "Apple-tab-span" style= "white-space:pre" ></span>POST { $urls [‘path‘]} HTTP/1.1
<span class = "Apple-tab-span" style= "white-space:pre" ></span>Host:{ $urls [‘host‘]}
<span class = "Apple-tab-span" style= "white-space:pre" ></span>Content-Type: application/x-www-form-urlencoded
<span class = "Apple-tab-span" style= "white-space:pre" ></span>Content-Length:{ $length }
<span class = "Apple-tab-span" style= "white-space:pre" ></span>Connection: close
<span class = "Apple-tab-span" style= "white-space:pre" ></span>{ $post }
<span class = "Apple-tab-span" style= "white-space:pre" ></span>HEADER;
fwrite( $fp , $header );
$result =‘‘;
while (! feof ( $fp )){
$result .= fread ( $fp ,512);
}
$result = explode ( "\r\n\r\n" , $result ,2);
return $result [1];
}
$data = socket_post( "http://www.a.com/post/post.php" , array (‘name‘=>‘caiknife‘,‘email‘=>‘caiknife#gmail.com‘));
var_dump( $data );

上面这三种方法最后看到的内容都是一样的,都可以得到post的传值;但是在是用socket的时候,发送header信息时必须要注意header的完整信息,比如content type和content length必须要有,connection: close和post数据之间要空一行,等等;而通过socket取得的内容是包含了header信息的,要处理一下才能获得真正的内容.

下面给大家说下php模拟post提交请求,调用接口 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 模拟post进行url请求
* @param string $url
* @param string $param
*/
function request_post( $url = '' , $param = '' ) {
if ( empty ( $url ) || empty ( $param )) {
return false;
}
$postUrl = $url ;
$curlPost = $param ;
$ch = curl_init(); //初始化curl
curl_setopt( $ch , CURLOPT_URL, $postUrl ); //抓取指定网页
curl_setopt( $ch , CURLOPT_HEADER, 0); //设置header
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt( $ch , CURLOPT_POST, 1); //post提交方式
curl_setopt( $ch , CURLOPT_POSTFIELDS, $curlPost );
$data = curl_exec( $ch ); //运行curl
curl_close( $ch );
return $data ;
}

这是方法, 。

下面是具体的调用案例.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function testAction(){
$url = 'http://mobile.jschina.com.cn/jschina/register.php' ;
$post_data [ 'appid' ] = '10' ;
$post_data [ 'appkey' ] = 'cmbohpffXVR03nIpkkQXaAA1Vf5nO4nQ' ;
$post_data [ 'member_name' ] = 'zsjs123' ;
$post_data [ 'password' ] = '123456' ;
$post_data [ 'email' ] = 'zsjs123@126.com' ;
$o = "" ;
foreach ( $post_data as $k => $v )
{
$o .= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr ( $o ,0,-1);
$res = $this ->request_post( $url , $post_data );
print_r( $res );
}

这样就提交请求,并且获取请求结果了。一般返回的结果是json格式的.

这里的post是拼接出来的.

也可以改造成下面的方式.

?
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
/**
* 模拟post进行url请求
* @param string $url
* @param array $post_data
*/
function request_post( $url = '' , $post_data = array ()) {
if ( empty ( $url ) || empty ( $post_data )) {
return false;
}
$o = "" ;
foreach ( $post_data as $k => $v )
{
$o .= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr ( $o ,0,-1);
$postUrl = $url ;
$curlPost = $post_data ;
$ch = curl_init(); //初始化curl
curl_setopt( $ch , CURLOPT_URL, $postUrl ); //抓取指定网页
curl_setopt( $ch , CURLOPT_HEADER, 0); //设置header
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt( $ch , CURLOPT_POST, 1); //post提交方式
curl_setopt( $ch , CURLOPT_POSTFIELDS, $curlPost );
$data = curl_exec( $ch ); //运行curl
curl_close( $ch );
return $data ;
}

将拼接也封装了起来,这样调用的时候就更简洁了.

?
1
2
3
4
5
6
7
8
9
10
11
function testAction(){
$url = 'http://mobile.jschina.com.cn/jschina/register.php' ;
$post_data [ 'appid' ] = '10' ;
$post_data [ 'appkey' ] = 'cmbohpffXVR03nIpkkQXaAA1Vf5nO4nQ' ;
$post_data [ 'member_name' ] = 'zsjs124' ;
$post_data [ 'password' ] = '123456' ;
$post_data [ 'email' ] = 'zsjs124@126.com' ;
//$post_data = array();
$res = $this ->request_post( $url , $post_data );
print_r( $res );
}

  。

最后此篇关于PHP模拟post提交数据方法汇总的文章就讲到这里了,如果你想了解更多关于PHP模拟post提交数据方法汇总的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com