PHP——CURL类
来源:互联网 发布:java date sethour 编辑:程序博客网 时间:2024/05/01 19:53
CURL类 Curl.php
<?php/** * Created by YrPHP. * User: Kwin * QQ:284843370 * Email:kwinwong@hotmail.com * GitHub:https://github.com/kwinH/YrPHP */namespace YrPHP;class Curl{ protected $options = array(); protected $ch; function __construct() { $this->ch = curl_init(); } /** * 设置需要获取的URL地址 * [setUrl description] * @param string $url [description] */ function setUrl($url = '') { $this->ch = curl_init(); $this->options = array(); $this->options[CURLOPT_URL] = $url; return $this; } /** * @param string $option * @param string $value * @return $this */ function setOptions($option = '', $value = '') { $this->options[$option] = $value; return $this; } /** * @param bool $verify 是否验证证书 默认false不验证 * @param string $path 验证证书时,证书路径 * @return $this */ function sslVerify($verify = false, $path = '') { if ($verify) { $this->options[CURLOPT_SSL_VERIFYPEER] = true;//开启后cURL将从服务端进行验证。 $this->options[CURLOPT_CAINFO] = $path; //一个保存着1个或多个用来让服务端验证的证书的文件名 } else { $this->options[CURLOPT_SSL_VERIFYPEER] = false; //禁用后cURL将终止从服务端进行验证。 $this->options[CURLOPT_SSL_VERIFYHOST] = 0;//不检查证书 //设为0表示不检查证书 设为1表示检查证书中是否有CN(Common name)字段 设为2表示在1的基础上校验当前的域名是否与CN匹配 默认2 } return $this; } /** * 传递一个连接中需要的用户名和密码 * @param array|string $userPassword 格式为:array('userName','password') 或则, "username:password" */ function setUserPassword($userPassword = '') { if (is_array($userPassword)) { $userPassword = implode(':', $userPassword); } $this->options[CURLOPT_USERPWD] = $userPassword; //传递一个连接中需要的用户名和密码 return $this; } /** * @param array $header //请求头 */ function setHeader($header = array()) { $this->options[CURLOPT_HTTPHEADER] = $header; //一个用来设置HTTP头字段的数组 $this->options[CURLOPT_HEADER] = 1;//启用时会将头文件的信息作为数据流输出。 return $this; } /** * 启用时会发送一个常规的POST请求,默认类型为:App/x-www-form-urlencoded,就像表单提交的一样 * @param array|string $data * @param string $enctype App|multipart 默认为application,文件上传请用multipart */ function post($data = array(), $enctype = 'App') { if ($enctype == 'App' && is_array($data)) { $data = http_build_query($data); } elseif ($enctype == 'multipart' && is_string($data)) { $data = parse_str($data, $data); } $this->options[CURLOPT_POST] = true;//启用时会发送一个常规的POST请求,类型为:App/x-www-form-urlencoded $this->options[CURLOPT_POSTFIELDS] = $data;//如果$data是一个数组,Content-Type头将会被设置成multipart/form-data return $this; } /** * 启用时会发送一个常规的GET请求 * @param array|string $data array('user'=>'admin','pass'=>'admin') | admin&admin * @return $this */ function get($data = array()) { if (is_array($data)) { $data = http_build_query($data); } if (strstr($this->options[CURLOPT_URL], '?') !== false) { $this->options[CURLOPT_URL] = $this->options[CURLOPT_URL] . '&' . $data; } else { $this->options[CURLOPT_URL] = $this->options[CURLOPT_URL] . '?' . $data; } return $this; } /** * 启用时会发送一个常规的DELETE请求 * @param array $data * @return array */ function delete($data = array()) { curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data); return $data; } /** * 启用时会发送一个常规的PUT请求 * @param array $data * @return array */ function put($data) { curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data); return $data; } /** * 获得cookies * @param string $path 定义Cookie存储路径 必须使用绝对路径 */ function getCookie($path = '') { $this->options[CURLOPT_COOKIEJAR] = $path;//连接结束后保存cookie信息的文件 return $this; } /** * 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。 * @param string|array $cookies 定义Cookie的值 */ function setCookie($cookies = array()) { $cookieString = ''; if (is_array($cookies)) { foreach ($cookies as $name => $value) { $value = trim($value); $cookieString .= $name . '=' . $value . '; '; } } else { $cookieString = $cookies; } $cookieString = trim($cookieString); $this->options[CURLOPT_COOKIE] = $cookieString;//cookie字符串 return $this; } /** * 取出cookie,一起提交给服务器 * @param string $path 定义Cookie存储路径 必须使用绝对路径 */ function setCookieFile($path = '') { $this->options[CURLOPT_COOKIEFILE] = $path;//包含cookie数据的文件名 return $this; } /** * 执行一个cURL会话 返回执行的结果 * @param bool $debug 是否开启调试模式 如果为true将打印调试信息 * @return mixed */ function exec($debug = false) { $this->options[CURLOPT_RETURNTRANSFER] = true; //将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出。 if ($debug) { $this->options[CURLOPT_VERBOSE] = true;//启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。 $this->options[CURLINFO_HEADER_OUT] = true;//启用时追踪句柄的请求字符串。 $this->options[CURLOPT_HEADER] = true;//启用时会将头文件的信息作为数据流输出。 } curl_setopt_array($this->ch, $this->options); $re = curl_exec($this->ch); if ($debug) { $httpCode = curl_getinfo($this->ch); var_export($httpCode); } return $re; } function getInfo() { return curl_getinfo($this->ch); } function __destruct() { curl_close($this->ch); }}
CURL类 实例:
支持连贯操作
GET请求
require 'Curl.php'$curl = new YrPHP\Curl;//设置需要获取的URL地址$curl = $curl->setUrl($url . 'https://api.weixin.qq.com/sns/oauth2/access_token');/*** 启用时会发送一个常规的GET请求* @param array|string $data array('user'=>'admin','pass'=>'admin') | admin&admin* @return $this */ $curl = $curl->get('appid=' . $AppID . '&secret=' . $AppSecret . '&code=' . $code . '&grant_type=authorization_code');/*** 执行一个cURL会话 返回执行的结果* @param bool $debug 是否开启调试模式 如果为true将打印调试信息* @return mixed */ $curl =$curl->exec();
POST请求
require 'Curl.php'$curl = new YrPHP\Curl;//设置需要获取的URL地址$curl = $curl->setUrl($url . 'https://127.0.0.1/test.php');/*** 启用时会发送一个常规的POST请求,默认类型为:application/x-www-form-urlencoded,就像表单提交的一样* @param array|string $data* @param string $enctype application|multipart 默认为application,文件上传请用multipart */ $curl = $curl->post(array('name' => 'test', 'sex'=>1,'birth'=>'20101010'));/*** 执行一个cURL会话 返回执行的结果* @param bool $debug 是否开启调试模式 如果为true将打印调试信息* @return mixed */ $curl =$curl->exec();
获取Cookie模拟登陆
require 'Curl.php'$curl = new YrPHP\Curl;$cookie_file = tempnam('./temp','cookie');//设置需要获取的URL地址$curl = $curl->setUrl($url . 'https://127.0.0.1/login.php');/*** 启用时会发送一个常规的POST请求,默认类型为:application/x-www-form-urlencoded,就像表单提交的一样* @param array|string $data* @param string $enctype application|multipart 默认为application,文件上传请用multipart */ $curl = $curl->post(array('name' => 'admin', 'passwd'=>'123456'));/*** 获得cookies* @param string $path 定义Cookie存储路径 必须使用绝对路径 */ $curl = $curl->getCookie($cookie_file);/*** 执行一个cURL会话 返回执行的结果* @param bool $debug 是否开启调试模式 如果为true将打印调试信息* @return mixed */ $curl =$curl->exec();$curl = $curl->setUrl($url . 'https://127.0.0.1/getUserInfo.php');/*** 取出cookie,一起提交给服务器* @param string $path 定义Cookie存储路径 必须使用绝对路径 */ $data = $curl->setCookieFile($cookie_file)->exec();/*** 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。* @param string|array $cookies 定义Cookie的值 */ $curl = $curl->setCookie(array('name'=>'admin','passwd'=>'123456'));$data = $curl->exec();var_dump($data);//清理cookie文件unlink($cookie_file);
authorization认证登录
require 'Curl.php'$curl = new YrPHP\Curl;$headers['Referer'] = 'http://www.baidu.com';$headers['CLIENT-IP'] = '202.103.229.40';$headers['X-FORWARDED-FOR'] = '202.103.229.40';//设置需要获取的URL地址$curl = $curl->setUrl($url . 'https://127.0.0.1/login.php');/*** @param bool $verify 是否验证证书 默认false不验证* @param string $path 验证证书时,证书路径* @return $this */ $curl = $curl->sslVerify(false);/*** 传递一个连接中需要的用户名和密码* @param array|string $userPassword 格式为:array('userName','password') 或则, "username:password" */$curl = $curl->setUserPassword(array('admin','123456'));//setHeader(array())设置请求头$curl->setHeader($headers)->get()->exec();var_dump($data);
0 0
- PHP——CURL类
- PHP——CURL方法集合
- php - 封装 - curl类
- php Curl工具类
- PHP Curl工具类
- php curl 类
- php的curl封装类
- php的curl封装类
- curl和php Curl
- PHP相关系列 - PHP CURL类
- PHP代码——Curl实现网页代理proxy
- PHP——CURL模拟请求微信接口
- PHP开发小技巧⑧—CURL请求
- php curl
- php curl
- php curl
- php curl
- php curl
- Glide加载图片并保存到本地返回file,bitmap
- 谈谈Android 6.0运行时权限理解
- 南京邮电大学离散数学实验三偏序关系中盖住关系的求取及格论中有补格的判定
- 谈谈Android 6.0运行时权限理解
- PAT B1029
- PHP——CURL类
- PROCEDURE-12
- HTTP详解(1)-工作原理
- HDU 1014 Uniform Generator 水题
- 掌握shell应用,Linux 任你行走!
- android animation 零碎总结
- hdu 2519 - 求解组合数
- cnetos 6.5 32bit oracle安装
- C# 中的一些 基本语句,循环的格式.1