# BeiuCurl **Repository Path**: beiuu/beiucurl ## Basic Information - **Project Name**: BeiuCurl - **Description**: BeiuCurl 是从 BeiYuPHP 自带的 NetWork 网络组件中分离出来的自研组件,基于 curl 封装,主打轻、快、简,欢迎大家使用。 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-24 - **Last Updated**: 2024-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: PHP, Curl, Spider ## README # BeiuCurl #### 介绍 BeiuCurl 是从 BeiYuPHP 自带的 NetWork 网络组件中分离出来的自研组件,基于 curl 封装,主打轻、快、简,欢迎大家使用。 #### 更新 - 所有方法均改为小驼峰写法,即首字母小写。 - 新增 addBinary() 上传文件方法。 - 新增 enableFormatHeader() 将返回 Header 信息改为标准格式(数组)。 - 新增 setPostData() 增加 POST 数据。 - 初始化方法新增HTTP验证,即 `new BeiuCurl($url, $method, $username, $password);` 若不需要HTTP验证,后两个参数可省略。 - *备注:因为新版本代码基本上已经大改,因此不再兼容旧版本。* #### 移除 - SetCookie()、SetReferer()、SetUserAgent(),改为统一用 setHeader() 方法实现,且不再兼容历史。 - GetStatusCode()、GetStatusText()、GetContent(),意义不大。 #### 业务组件初始化 ``` $http = new BeiuCurl('https://api.beiyu.vip/api/tea', 'GET'); ``` - 第一个参数为url地址,如果请求方式为GET,则必须保证url地址完整性 - 第二个参数为method方式,仅支持[GET|POST] #### 业务组件的属性 - **responseText** 返回的数据 - **responseHeader** 返回的头部信息 - **responseVersion** 返回的版本文本 - **status** 返回的状态码 - **statusText** 返回的状态码文本 #### 业务组件的方法 - `send($data)` 发送连接,如果请求方式为POST,`$data`必须为关联数组,例,`send(array('token' => '123456'))`;如果请求方式为GET,则参数可省略。 - `setHeader($headerKey, $headerValue, $append = false)` 设置请求 Header 信息,`$append`为 true 时,可以在已设置的 Header 上追加内容。 - `setTimeOut($connectTimeout, $sendTimeout)` 设置连接超时。 - `setIP($ip)` 设置请求IP,如果不设置参数或值为空,则默认为随机IP。 - `setMaxRedirs($n)` 设置最大重定向次数。 - `setProxy($proxyIP, $proxyAuth)` 设置HTTP代理,第一参数是代理IP:端口(端口为空可不写),第二参数是username:password - `setPostData($bstrItem, $bstrValue)` 增加 POST 数据。 - `enableGzip()` 启用 Gzip 压缩 - `enableFormatHeader()` 启用返回 Header 信息标准格式(数组)。 - `getResponseHeaders()` 获取全部响应头(数组)。 - `getResponseHeader()` 获取指定响应头 - `hasResponseHeader()` 判断指定响应头是否存在 #### 演示代码 ###### 一、GET 方法访问网页 ``` $http = new BeiuCurl('https://api.beiyu.vip/api/tea', 'GET'); $http->send(); $text = $http->responseText; // 获取访问后的正文 $code = $http->status; // 获取HTTP响应代码,正常访问为200 ``` ###### 二、POST 方法访问网页 ``` // 假设我们向某页面提交POST登录 $data = array(); $data['username'] = '天空飘来五个字'; $data['password'] = md5('那都不是事儿'); $http = new BeiuCurl('https://kan.beiyu.vip/login.html', 'POST'); $http->enableGzip(); // 打开gzip $http->setTimeOut(10, 5); // 设置超时 $http->send($data); $text = $http->responseText; // 获取访问后的正文 $code = $http->status; // 获取HTTP响应代码,正常访问为200 ``` ###### 三、设置 Header 信息 ``` // 比如遇到某页面需要验证 Cookie 或者 User-Agent 的情况 // 在 Send() 之前,设置 SetHeader() $ua = 'BeiuCurl/2.0 BeiYuPHP/18100'; // User-Agent $ck = array(); $ck[] = 'username=' . base64_encode('beiyu'); //cookies name 为 beiyu $ck[] = 'password=' . md5('beiyu666'); // cookies password 为 beiyu666 $http = new BeiuCurl('https://api.beiyu.vip/', 'GET'); $http->setHeader('Host', 'api.beiyu.vip'); $http->setHeader('Connection', 'keep-alive'); $http->setHeader('Cache-Control', 'max-age=0'); $http->setHeader('Accept-Language', 'zh-CN,zh;q=0.9'); $http->setHeader('User-Agent', $ua); $http->setHeader('Cookie', implode("; ", $ck)); $http->setIP('127.0.0.1'); $http->enableGzip(); $http->enableFormatHeader(); $http->setTimeOut(10, 5); // 设置超时 $http->send(); $text = $http->responseText; // 获取访问后的正文 ``` ###### 四、指定重定向次数 ``` // 默认重定向次数是 1 次,也就是遇到 301 / 302 就停 $http = new BeiuCurl('https://api.beiyu.vip/api/chp', 'GET'); $http->setMaxRedirs(5); // 设定重定向次数是5次,说明最多可以重定向5次,可避免死循环。 $http->send(); $text = $http->responseText; // 获取访问后的正文 ``` #### 组件作者 - :tw-1f1e8-1f1f3: 北羽凌薪(BeiYuLingxin) - :envelope: beiyuyun@qq.com - :globe_with_meridians: [blog.beiyu.vip](https://blog.beiyu.vip/) - :globe_with_meridians: [tool.beiyu.vip](https://tool.beiyu.vip/) - :globe_with_meridians: [kan.beiyu.vip](https://kan.beiyu.vip/) - :globe_with_meridians: [api.beiyu.vip](https://api.beiyu.vip/) - :globe_with_meridians: [ant.beiyu.vip](https://ant.beiyu.vip/)