国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP模擬post提交數據方法匯總

2024-05-04 23:43:06
字體:
來源:轉載
供稿:網友
使用php模擬post傳值雖然在日常生活中用到的不是很多,但是在某些場合還是經常用到的。下面VeVb武林網小編給大家整理了三種php模擬post傳值的方法,file_get_contents、curl和socket,需要的朋友參考下
 

使用php模擬post傳值雖然在日常生活中用到的不是很多,但是在某些場合還是經常用到的。下面VeVb武林網小編給大家整理了三種php模擬post傳值的方法,file_get_contents、curl和socket。

第一種:file_get_contents來模擬post

<phpfunction 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

<phpfunction 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

<phpfunction 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 (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);}


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹东市| 仁化县| 邢台县| 将乐县| 甘洛县| 淮滨县| 甘泉县| 石景山区| 苏尼特右旗| 淮安市| 兴海县| 屏山县| 井冈山市| 曲水县| 黔江区| 娄底市| 巴彦县| 平遥县| 红原县| 哈巴河县| 兴山县| 新闻| 永春县| 海林市| 沧州市| 高碑店市| 柳林县| 金昌市| 三原县| 郎溪县| 民丰县| 治县。| 河南省| 合肥市| 天津市| 辽宁省| 长宁区| 屏东市| 长沙县| 陈巴尔虎旗| 邵阳市|