《PHP應(yīng)用:PHP模擬post提交數(shù)據(jù)方法匯總》要點(diǎn):
本文介紹了PHP應(yīng)用:PHP模擬post提交數(shù)據(jù)方法匯總,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
使用php模擬post傳值雖然在日常生活中用到的不是很多,但是在某些場(chǎng)合還是經(jīng)常用到的.下面維易PHP小編給大家整理了三種php模擬post傳值的方法,file_get_contents、curl和socket.PHP應(yīng)用
第一種:file_get_contents來(lái)模擬postPHP應(yīng)用
<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模擬postPHP應(yīng)用
<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來(lái)模擬postPHP應(yīng)用
<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ù)之間要空一行,等等;而通過(guò)socket取得的內(nèi)容是包含了header信息的,要處理一下才能獲得真正的內(nèi)容.PHP應(yīng)用
下面給大家說(shuō)下php模擬post提交請(qǐng)求,調(diào)用接口 PHP應(yīng)用
/** * 模擬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)頁(yè) 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; }
這是方法,
PHP應(yīng)用
下面是具體的調(diào)用案例.
PHP應(yīng)用
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格式的.
PHP應(yīng)用
這里的post是拼接出來(lái)的.
PHP應(yīng)用
也可以改造成下面的方式.
PHP應(yīng)用
/** * 模擬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)頁(yè) 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; }
將拼接也封裝了起來(lái),這樣調(diào)用的時(shí)候就更簡(jiǎn)潔了.
PHP應(yīng)用
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應(yīng)用:PHP模擬post提交數(shù)據(jù)方法匯總》是否對(duì)您有啟發(fā),歡迎查看更多與《PHP應(yīng)用:PHP模擬post提交數(shù)據(jù)方法匯總》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/7540.html