您的位置:首页 > 编程语言 > PHP开发

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: