Web_PHP_Curl浅说;
2016-06-25 09:43
543 查看
<?php /** * curl会话 * @author 2WR3_cyb */ class CurlClass { /** * Curl使用示例 * @param string $url 请求路径,如'http://x.x.x'; * @param array $fields 请求参数,如array('var' => 'value'), or can be empty; * @param string $auth 链接凭据,如'user:password', or can be empty; * @return array($body, $headers) [返回消息体、消息头] */ public function client_curl($url, $fields = array(), $auth = false){ //1/ 初始化CURL会话 $curl = curl_init($url); //2/ 选项设置 // 设置选项:用户代理,在HTTP请求中包含一个"User-Agent: "头的字符串; curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); // 设置选项:返回转换,将curl_exec()获取的信息以文件流的形式返回,而不是直接输出; curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 设置选项:启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中; curl_setopt($curl, CURLOPT_VERBOSE, 1); // 选项设置:含文件头,启用时会将头文件的信息作为数据流输出; curl_setopt($curl, CURLOPT_HEADER, 1); /// 验证凭据 if($auth){ // 选项设置:用户凭据,传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"; curl_setopt($curl, CURLOPT_USERPWD, "$auth"); // 选项设置:验证 方式,使用的HTTP验证方法; curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); } /// 请求参数 if($fields){ // 请求字串:生成 URL-encode 之后的请求字符串; $fields_string = http_build_query($fields); // 选项设置:post请求,启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样; curl_setopt($curl, CURLOPT_POST, true); // 选项设置:在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出; curl_setopt($curl, CURLOPT_BINARYTRANSFER, true); // 选项设置:请求参数,全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。 curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string); } //3/ 执行会话:成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE。 $response = curl_exec($curl); // 获取信息:header部分的大小; $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); // 获取信息:头部信息; $header_string = substr($response, 0, $header_size); // 获取信息:消息信息; $body = substr($response, $header_size); /// 头部信息处理 $header_rows = explode(PHP_EOL, $header_string); $header_rows = array_filter($header_rows, "trim"); //array_filter — 用回调函数过滤数组中的单元; $i = 0; foreach((array)$header_rows as $hr){ $colonpos = strpos($hr, ':'); $key = $colonpos !== false ? substr($hr, 0, $colonpos) : (int)$i++; $headers[$key] = $colonpos !== false ? trim(substr($hr, $colonpos+1)) : $hr; } foreach((array)$headers as $key => $val){ $vals = explode(';', $val); if(count($vals) >= 2){ unset($headers[$key]); foreach($vals as $vk => $vv){ $equalpos = strpos($vv, '='); $vkey = $equalpos !== false ? trim(substr($vv, 0, $equalpos)) : (int)$i++; $headers[$key][$vkey] = $equalpos !== false ? trim(substr($vv, $equalpos+1)) : $vv; } } } //4/ 关闭会话 curl_close($curl); return array($body, $headers); } }
相关文章推荐
- Sofia-SIP辅助文档十四 - Sofia SIP用户代理库 - "tport" - 传输模块
- 关于thinkphp连贯操作加锁的详细介绍lock
- thinkphp5.0的惰性加载
- php实现var_dump函数
- PHP闭包--匿名函数
- 使用PHP创建一个REST API(译)
- php编译安装php-amq扩展简明教程
- php好代码风格的阶段性总结
- php函数传值的引用传递注意事项分析
- php项目开发中用到的快速排序算法分析
- php日期操作技巧小结
- 打造 PHP版本 1password
- windows下使用PHP+ImageMagick压缩图片
- thinkphp3.2.2一个无限分类实现
- phpcms实现图文分离,文件上传到远程服务器的方法
- PHP与SQL 的基础知识
- phpcms 同步到发布站点,发布站点到远程FTP根目录
- php 变量与类型相关扩展——类/对象
- phpcms制作静态手机移动站
- 我的PHP笔记(杂一)