PHP模拟post提交数据方法汇总
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-10 10:54:14 浏览: 评论:0
使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的,下面脚本之家小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket,需要的朋友参考下
使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的。下面脚本之家小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket。
第一种:file_get_contents来模拟post
- <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
- <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
- <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提交请求,调用接口
- /**
- * 模拟post进行url请求
- * @param string $url
- * @param string $param
- */
- function request_post($url = '', $param = '') {
- if (emptyempty($url) || emptyempty($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;
- }
这是方法,下面是具体的调用案例。
- 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 (emptyempty($url) || emptyempty($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;
- }
将拼接也封装了起来,这样调用的时候就更简洁了。
- 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);
- }
Tags: PHP模拟post
相关文章
- ·php模拟post提交数据的方法(2021-05-13)
- ·php实现模拟post请求用法实例(2021-06-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)