Rumah > Artikel > pembangunan bahagian belakang > php中get post请求方法封装
<span style="font-size:18px;">网站上的商城可以搭建ecshop实现,微信端的微商城也可以开发wap版商城,然后通过链接链到微信菜单上,这样实现起来就不需要远程调用数据了,但登陆上有个问题,在微信上进入微商城在用户体验上当然不需要再登陆只需要有微信openid即可。所以有个考虑是在微信端开发微商城,所以的数据是取自网站商城的,这时需要远程请求数据。 有了ihttp_request()方法后,可通过此方法获取远程数据</span>
<span style="font-size:18px;"></span><pre name="code" class="php">function ihttp_request($url, $post = '', $extra = array(), $timeout = 60) { $urlset = parse_url($url); if(empty($urlset['path'])) { $urlset['path'] = '/'; } if(!empty($urlset['query'])) { $urlset['query'] = "?{$urlset['query']}"; } if(empty($urlset['port'])) { $urlset['port'] = $urlset['scheme'] == 'https' ? '443' : '80'; } if(function_exists('curl_init') && function_exists('curl_exec')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $urlset['scheme']. '://' .$urlset['host'].($urlset['port'] == '80' ? '' : ':'.$urlset['port']).$urlset['path'].$urlset['query']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); if($post) { curl_setopt($ch, CURLOPT_POST, 1); if (is_array($post)) { $post = http_build_query($post); } curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'); if (!empty($extra) && is_array($extra)) { $headers = array(); foreach ($extra as $opt => $value) { if (strexists($opt, 'CURLOPT_')) { curl_setopt($ch, constant($opt), $value); } elseif (is_numeric($opt)) { curl_setopt($ch, $opt, $value); } else { $headers[] = "{$opt}: {$value}"; } } if(!empty($headers)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } } $data = curl_exec($ch); $status = curl_getinfo($ch); $errno = curl_errno($ch); $error = curl_error($ch); curl_close($ch); if($errno || empty($data)) { return error(1, $error); } else { return ihttp_response_parse($data); } } $method = empty($post) ? 'GET' : 'POST'; $fdata = "{$method} {$urlset['path']}{$urlset['query']} HTTP/1.1\r\n"; $fdata .= "Host: {$urlset['host']}\r\n"; if(function_exists('gzdecode')) { $fdata .= "Accept-Encoding: gzip, deflate\r\n"; } $fdata .= "Connection: close\r\n"; if (!empty($extra) && is_array($extra)) { foreach ($extra as $opt => $value) { if (!strexists($opt, 'CURLOPT_')) { $fdata .= "{$opt}: {$value}\r\n"; } } } $body = ''; if ($post) { if (is_array($post)) { $body = http_build_query($post); } else { $body = urlencode($post); } $fdata .= 'Content-Length: ' . strlen($body) . "\r\n\r\n{$body}"; } else { $fdata .= "\r\n"; } if($urlset['scheme'] == 'https') { $fp = fsockopen('ssl://' . $urlset['host'], $urlset['port'], $errno, $error); } else { $fp = fsockopen($urlset['host'], $urlset['port'], $errno, $error); } stream_set_blocking($fp, true); stream_set_timeout($fp, $timeout); if (!$fp) { return error(1, $error); } else { fwrite($fp, $fdata); $content = ''; while (!feof($fp)) $content .= fgets($fp, 512); fclose($fp); return ihttp_response_parse($content, true); } } function ihttp_response_parse($data, $chunked = false) { $rlt = array(); $pos = strpos($data, "\r\n\r\n"); $split1[0] = substr($data, 0, $pos); $split1[1] = substr($data, $pos + 4, strlen($data)); $split2 = explode("\r\n", $split1[0], 2); preg_match('/^(\S+) (\S+) (\S+)$/', $split2[0], $matches); $rlt['code'] = $matches[2]; $rlt['status'] = $matches[3]; $rlt['responseline'] = $split2[0]; $header = explode("\r\n", $split2[1]); $isgzip = false; $ischunk = false; foreach ($header as $v) { $row = explode(':', $v); $key = trim($row[0]); $value = trim($row[1]); if (is_array($rlt['headers'][$key])) { $rlt['headers'][$key][] = $value; } elseif (!empty($rlt['headers'][$key])) { $temp = $rlt['headers'][$key]; unset($rlt['headers'][$key]); $rlt['headers'][$key][] = $temp; $rlt['headers'][$key][] = $value; } else { $rlt['headers'][$key] = $value; } if(!$isgzip && strtolower($key) == 'content-encoding' && strtolower($value) == 'gzip') { $isgzip = true; } if(!$ischunk && strtolower($key) == 'transfer-encoding' && strtolower($value) == 'chunked') { $ischunk = true; } } if($chunked && $ischunk) { $rlt['content'] = ihttp_response_parse_unchunk($split1[1]); } else { $rlt['content'] = $split1[1]; } if($isgzip && function_exists('gzdecode')) { $rlt['content'] = gzdecode($rlt['content']); } $rlt['meta'] = $data; if($rlt['code'] == '100') { return ihttp_response_parse($rlt['content']); } return $rlt; } function ihttp_response_parse_unchunk($str = null) { if(!is_string($str) or strlen($str) <br>$goods = array(<br>"api_version" =>"1.0",<br>"goods_id" => "4",<br>"ac" => "ac",<br>"act" => "search_goods_detail",<br>"return_data" => "json",<br>);<br>$url = "http://10.92.1.3/api.php"; //这里是10.92.1.2服务器上调用1.3上api.php获取其数据<br>$result = ihttp_request($url,$data);<br>var_dump($result);<br>打印出的内容是:<br>array(6) {<br>["code"]=><br>string(3) "200"<br>["status"]=><br>string(2) "OK"<br>["responseline"]=><br>string(15) "HTTP/1.1 200 OK"<br>["headers"]=><br>array(9) {<br>["Server"]=><br>string(5) "nginx"<br>["Date"]=><br>string(19) "Fri, 06 Mar 2015 08"<br>["Content-Type"]=><br>string(24) "text/html; charset=utf-8"<br>["Transfer-Encoding"]=><br>string(7) "chunked"<br>["Connection"]=><br>string(10) "keep-alive"<br>["Vary"]=><br>string(15) "Accept-Encoding"<br>["X-Powered-By"]=><br>string(10) "PHP/5.3.17"<br>["Cache-control"]=><br>string(7) "private"<br>["Set-Cookie"]=><br>array(2) {<br>[0]=><br>string(55) "ECS_ID=05fdcd0810e735bf2b3b3c8ddb5911d94e319b8b; path=/"<br>[1]=><br>string(47) "ECS[visit_times]=1; expires=Sat, 05-Mar-2016 00"<br>}<br>}<br>["content"]=><br>string(241) "{"result":"success","msg":"","info":{"data_info":[{"goods_id":"1","last_modify":"1423937979"},{"goods_id":"2","last_modify":"1425595831"},{"goods_id":"3","last_modify":"1423937959"},{"goods_id":"4","last_modify":"1423942862"}],"counts":"4"}}"<br>["meta"]=><br>string(625) "HTTP/1.1 200 OK<br>Server: nginx<br>Date: Fri, 06 Mar 2015 08:03:41 GMT<br>Content-Type: text/html; charset=utf-8<br>Transfer-Encoding: chunked<br>Connection: keep-alive<br>Vary: Accept-Encoding<br>X-Powered-By: PHP/5.3.17<br>Set-Cookie: ECS_ID=05fdcd0810e735bf2b3b3c8ddb5911d94e319b8b; path=/<br>Cache-control: private<br>Set-Cookie: ECS[visit_times]=1; expires=Sat, 05-Mar-2016 00:03:41 GMT; path=/<br>打印的内容非常详细,连头部信息都打出来了,但我们只需要关心content中的内容,这才是我们需要获取的数据<br>["content"]=><br>string(241) "{"result":"success","msg":"","info":{"data_info":[{"goods_id":"1","last_modify":"1423937979"},{"goods_id":"2","last_modify":"1425595831"},{"goods_id":"3","last_modify":"1423937959"},{"goods_id":"4","last_modify":"1423942862"}],"counts":"4"}}"<br><pre class="brush:php;toolbar:false">
以上就介绍了php中get post请求方法封装,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。