温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP如何实现网络请求

发布时间:2022-07-04 10:06:27 来源:亿速云 阅读:218 作者:iii 栏目:开发技术

这篇“PHP如何实现网络请求”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP如何实现网络请求”文章吧。

一、分析php发送网网络请求的方法

对于php发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_contents只能完成一些间单的网络请求,稍复杂的就无法完成,例如文件上传,cookies,验证,表单提交等,用php的curl可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等,所以我们在开发中尽量用curl发网络请求,无论是简单还是复杂

二、file_get_contents发送网络请求示例

file_get_contents(path,include_path,context,start,max_length)

PHP如何实现网络请求

一般用file_get_contents或者fopen, file , readfile等函数读取url的时候 会创建一个$http_response_header变量保存HTTP响应的报头,使用fopen等函数打开的数据流信息可以用stream_get_meta_data获取

$html = file_get_contents('http://www.baidu.com'); print_r($http_response_header); $fp = fopen('http://www.baidu.com', 'r'); print_r(stream_get_meta_data($fp)); fclose($fp);

摸拟post请求:

$url = 'http://192.168.1.1/test.php'; $data = array(     'keyword' => 'test data', ); $content = http_build_query($data); $content_length = strlen($content); $options = array(     'http' => array(         'method' => 'POST',         'header' =>         "Content-type: application/x-www-form-urlencoded\r\n" .         "Content-length: $content_length\r\n",         'content' => $content     ) ); echo file_get_contents($url, false, stream_context_create($options));

三、php 用curl发送网络请求

curl可以支持https认证、http post、ftp上传、代理、cookies、简单口令认证等等功能,使用前需要先在你的PHP环境中安装和启用curl模块,这里有两种写法供大家参考:

<?php function geturl($url){         $headerArray =array("Content-type:application/json;","Accept:application/json");         $ch = curl_init();         curl_setopt($ch, CURLOPT_URL, $url);         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);         $output = curl_exec($ch);         curl_close($ch);         $output = json_decode($output,true);         return $output; }     function posturl($url,$data){         $data  = json_encode($data);             $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");         $curl = curl_init();         curl_setopt($curl, CURLOPT_URL, $url);         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);         curl_setopt($curl, CURLOPT_POST, 1);         curl_setopt($curl, CURLOPT_POSTFIELDS, $data);         curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);         $output = curl_exec($curl);         curl_close($curl);         return json_decode($output,true); }     function puturl($url,$data){     $data = json_encode($data);     $ch = curl_init(); //初始化CURL句柄      curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL     curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出      curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT"); //设置请求方式     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串     $output = curl_exec($ch);     curl_close($ch);     return json_decode($output,true); }   function delurl($url,$data){     $data  = json_encode($data);     $ch = curl_init();     curl_setopt ($ch,CURLOPT_URL,$put_url);     curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");        curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     $output = curl_exec($ch);     curl_close($ch);     $output = json_decode($output,true); }   function patchurl($url,$data){     $data  = json_encode($data);     $ch = curl_init();     curl_setopt ($ch,CURLOPT_URL,$url);     curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");       curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     //20170611修改接口,用/id的方式传递,直接写在url中了     $output = curl_exec($ch);     curl_close($ch);     $output = json_decode($output);     return $output; } ?>

一个函数片时各种请求:

function sendCurl($url, $data = null,$method='POST') {     $method=strtoupper($method);     $start_wdmcurl_time = microtime(true);       $header = array(' application/x-www-form-urlencoded');     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);     curl_setopt($ch, CURLOPT_FAILONERROR, false);     // https 请求     if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https")     {         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);     }     if($method=='GET'){         if($data && is_array($data) && count($data)>0 ){             $url.="?".http_build_query($data);         }         curl_setopt($ch, CURLOPT_URL, $url);     }elseif($method=='POST'){         curl_setopt($ch, CURLOPT_POST, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);         if (is_array($data) && count($data)>0)         {             curl_setopt($ch, CURLOPT_POST, true);             $isPostMultipart = false;             foreach ($data as $k => $v)             {                 if ('@' == substr($v, 0, 1))                 {                     $isPostMultipart = true;                     break;                 }             }             unset($k, $v);             if ($isPostMultipart) {                 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);             } else {                 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));             }         }     }elseif(in_array($method,['PUT','DELETE','PATCH'])){         curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method);         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);     }     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     curl_setopt($ch,CURLOPT_HTTPHEADER,$header);     $reponse = curl_exec($ch);     curl_close($ch);     return $reponse; }

四、使用php composer的扩展guzzlehttp

composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client(); $response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');   echo $response->getStatusCode(); // 200 echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8' echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'   // Send an asynchronous request. $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); $promise = $client->sendAsync($request)->then(function ($response) {     echo 'I completed! ' . $response->getBody(); });   $promise->wait();

日常开发中我们尽量用方法三,自定义用curl处理网络请求,或用composer的guzzlehttp扩展库,有起来也很方便。

以上就是关于“PHP如何实现网络请求”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI