您好,欢迎访问一九零五行业门户网

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

使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的。下面小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket。
第一种:file_get_contents来模拟post
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
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
上面这三种方法最后看到的内容都是一样的,都可以得到post的传值;但是在是用socket的时候,发送header信息时必须要注意header的完整信息,比如content type和content length必须要有,connection: close和post数据之间要空一行,等等;而通过socket取得的内容是包含了header信息的,要处理一下才能获得真正的内容。
下面给大家说下php模拟post提交请求,调用接口
/*** 模拟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();//初始化curlcurl_setopt($ch, curlopt_url,$posturl);//抓取指定网页curl_setopt($ch, curlopt_header, 0);//设置headercurl_setopt($ch, curlopt_returntransfer, 1);//要求结果为字符串且输出到屏幕上curl_setopt($ch, curlopt_post, 1);//post提交方式curl_setopt($ch, curlopt_postfields, $curlpost);$data = curl_exec($ch);//运行curlcurl_close($ch);return $data;}
这是方法,
下面是具体的调用案例。
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是拼接出来的。
也可以改造成下面的方式。
/*** 模拟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();//初始化curlcurl_setopt($ch, curlopt_url,$posturl);//抓取指定网页curl_setopt($ch, curlopt_header, 0);//设置headercurl_setopt($ch, curlopt_returntransfer, 1);//要求结果为字符串且输出到屏幕上curl_setopt($ch, curlopt_post, 1);//post提交方式curl_setopt($ch, curlopt_postfields, $curlpost);$data = curl_exec($ch);//运行curlcurl_close($ch);return $data;}
将拼接也封装了起来,这样调用的时候就更简洁了。
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);}
其它类似信息

推荐信息