首页 > 编程 > PHP > 正文

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

2020-03-22 16:32:52
字体:
来源:转载
供稿:网友
使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的。下面phpstudy小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket。第一种:file_get_contents来模拟postfunction 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模拟postfunction 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来模拟postfunction 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 /span POST {$urls[‘path‘]} HTTP/1.1 span /span Host:{$urls[‘host‘]} span /span Content-Type: application/x-www-form-urlencoded span /span Content-Length:{$length} span /span Connection: close span /span {$post} span /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 $paramfunction 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_datafunction 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);}PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表