# http-client **Repository Path**: catmes/http-client ## Basic Information - **Project Name**: http-client - **Description**: HTTP请求客户端 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-04 - **Last Updated**: 2022-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Http请求工具 ## 安装 ```bash $ composer require catmes/http-client ``` ## 基本用法 ```php 'tom','password'=>'pwd123']; // x-www-form-urlencoded 数据格式 $postResponse = Curl::post("http://default_form_urlencoded", $postData); // json 数据格式 $postResponse = Curl::post("http://post_json_data", $postData, 'json'); ``` ## 高级用法 ### 上传文件 ```php use Catmes\HttpClient\Curl; $uploadFilePath = __DIR__."/sample_img.jpg"; $postData['upload'] = new \CURLFile($uploadFilePath); $curl = new Curl($url, 'post', $postData); $response = $curl->getResponse(); // 服务端处理上传文件的PHP代码 if($_FILES){ $filename = $_FILES['upload']['name']; $tmpname = $_FILES['upload']['tmp_name']; //保存图片到当前脚本所在目录 if(move_uploaded_file($tmpname, __DIR__.'/'.$filename)){ echo ('上传成功'); } } ``` ### 下载文件 ```php $url = "https://download.virtualbox.org/virtualbox/6.1.22/virtualbox-6.1_6.1.22-144080~Debian~buster_amd64.deb"; $filepath = "virtualbox-6.1_6.1.22-buster_amd64.deb"; $curl = new Curl($url); $curl->downloadFile($filepath)->getResponse(); ``` ### 模拟登录 #### 获取登录的cookie缓存 ```php $postData = ['username'=>'tom','password'=>'pwd123']; $curl = new Curl("https://yoursite/login_post.php", 'post', $postData); // 设置提交数据为 x-www-form-urlencoded。 $curl->postUrlEncoded(); // 通过设置自定义请求头,伪造访问来源 $curl->setHeader("referer","https://yoursite.com/login.php"); // 设定登录成功后,保存响应头的 cookie 数据到本地文件 $curl->cookieSave("curl.cookie"); // getResponse()方法执行HTTP网络请求,并返回响应的Response对象。 $response = $curl->getResponse(); ``` #### 通过cookie访问授权网址 ```php // 获取前面模拟登录成功后,返回的响应头。 为数组键值对类型。 $headersMap = $response->getHeadersMap(); // POST登录成功后,读取本地的cookie文件。 可以通过前面登录成功后,响应头的 `location` 数据,进行页面自动跳转。 if(array_key_exists('location', $headersMap)){ $curl = new Curl($headersMap['location']); $response = $curl->cookieRequest("curl.cookie")->getResponse(); echo $response; } ``` ### 自定义请求头 ```php $curl = new Curl("https://www.baidu.com"); // 通过设置用户代理 user-agent 请求头,模拟出win10的谷歌浏览器。 $curl->setHeader('user-agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'); $response = $curl->getResponse(); echo $response; ``` ### 响应对象 正常请求成功后,返回响应类 `Catmes\HttpClient\Response` 的对象实例。 因存在__toString()魔术方法, 直接输出为消息主体字符串。 即 `Response` 实例的 `getBody()方法`。 ```php // 获取响应头。 为数组键值对类型。 $headersMap = $response->getHeadersMap(); // 获取响应头。 数组列表类型。 $responseHeaders = $response->getHeadersList(); // 获取响应消息主体。字符串类型。 $responseBody = $response->getBody(); // 获取响应状态码。数据类型为整数。 如200, 400, 302 ... $responseStatusCode = $response->getStatusCode(); ```