PHP模擬post提交數(shù)據(jù)方法匯總
使用php模擬post傳值雖然在日常生活中用到的不是很多,但是在某些場(chǎng)合還是經(jīng)常用到的。下面腳本之家小編給大家整理了三種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);
上面這三種方法最后看到的內(nèi)容都是一樣的,都可以得到post的傳值;但是在是用socket的時(shí)候,發(fā)送header信息時(shí)必須要注意header的完整信息,比如content type和content length必須要有,connection: close和post數(shù)據(jù)之間要空一行,等等;而通過socket取得的內(nèi)容是包含了header信息的,要處理一下才能獲得真正的內(nèi)容。
下面給大家說下php模擬post提交請(qǐng)求,調(diào)用接口
/** * 模擬post進(jìn)行url請(qǐng)求 * @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);//抓取指定網(wǎng)頁 curl_setopt($ch, CURLOPT_HEADER, 0);//設(shè)置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//運(yùn)行curl curl_close($ch); return $data; }
這是方法,
下面是具體的調(diào)用案例。
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); }
這樣就提交請(qǐng)求,并且獲取請(qǐng)求結(jié)果了。一般返回的結(jié)果是json格式的。
這里的post是拼接出來的。
也可以改造成下面的方式。
/** * 模擬post進(jìn)行url請(qǐng)求 * @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);//抓取指定網(wǎng)頁 curl_setopt($ch, CURLOPT_HEADER, 0);//設(shè)置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//運(yùn)行curl curl_close($ch); return $data; }
將拼接也封裝了起來,這樣調(diào)用的時(shí)候就更簡(jiǎn)潔了。
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基于curl模擬post提交json數(shù)據(jù)示例
- php使用CURL模擬GET與POST向微信接口提交及獲取數(shù)據(jù)的方法
- PHP socket 模擬POST 請(qǐng)求實(shí)例代碼
- php模擬post上傳圖片實(shí)現(xiàn)代碼
- 利用PHP fsockopen 模擬POST/GET傳送數(shù)據(jù)的方法
- php實(shí)現(xiàn)模擬post請(qǐng)求用法實(shí)例
- php模擬post提交數(shù)據(jù)的方法
- php curl模擬post提交數(shù)據(jù)示例
- php curl模擬post請(qǐng)求小實(shí)例
- php模擬post提交請(qǐng)求調(diào)用接口示例解析
相關(guān)文章
Laravel5.1框架自帶權(quán)限控制系統(tǒng) ACL用法分析
這篇文章主要介紹了Laravel5.1框架自帶權(quán)限控制系統(tǒng) ACL用法,結(jié)合實(shí)例形式分析了laravel5.1相關(guān)的角色創(chuàng)建、權(quán)限分配等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12PHP中使用socket方式GET、POST數(shù)據(jù)實(shí)例
這篇文章主要介紹了PHP中使用socket方式GET、POST數(shù)據(jù)實(shí)例,本文分別給出GET方式和POST方式的代碼實(shí)例,需要的朋友可以參考下2015-04-04完美實(shí)現(xiàn)wordpress禁止文章修訂和自動(dòng)保存的方法
這篇文章主要介紹了完美實(shí)現(xiàn)wordpress禁止文章修訂和自動(dòng)保存的方法,需要的朋友可以參考下2014-11-11php中session_id()函數(shù)詳細(xì)介紹,會(huì)話id生成過程及session id長(zhǎng)度
這篇文章主要介紹了php中session_id()函數(shù)詳細(xì)介紹,會(huì)話id生成過程及session id長(zhǎng)度的相關(guān)資料,需要的朋友可以參考下2015-09-09thinkPHP5使用laypage分頁插件實(shí)現(xiàn)列表分頁功能
這篇文章主要為大家詳細(xì)介紹了thinkPHP5使用laypage分頁插件實(shí)現(xiàn)列表分頁功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11PHP統(tǒng)計(jì)二維數(shù)組元素個(gè)數(shù)的方法
數(shù)據(jù)表里面的字段 content 存儲(chǔ)了一個(gè)以逗號(hào)分割的字符串,最大有20個(gè)數(shù),最大數(shù)字為40。比如3,24,33,40類似字樣的數(shù)字序列。其實(shí)就是一個(gè)保存了多項(xiàng)投票結(jié)果的字段啦?,F(xiàn)在需要統(tǒng)計(jì)每個(gè)數(shù)字的個(gè)數(shù),也就是每個(gè)投票項(xiàng)有多少人投了,并排序2013-11-11php獲取新浪微博數(shù)據(jù)API實(shí)例
要獲取新浪微博的數(shù)據(jù),可以通過他們提供的API,地址:http://open.weibo.com/wiki/API文檔_V2,獲取數(shù)據(jù)的方法如下:2013-11-11PHP的error_reporting錯(cuò)誤級(jí)別變量對(duì)照表
這篇文章主要介紹了PHP的error_reporting錯(cuò)誤級(jí)別變量對(duì)照表,需要的朋友可以參考下2014-07-07