在项目中经常会调用一些网络接口,返回的数据一般为json 或者 xml 为主, 这个函数就是利用 curl 发送网络请求 获得数据,可以根据实际情况改编。
// 注意cookie 文件要修改成自己的
// 构造函数
public function __construct(){
parent::__construct();
// cookie 目录
$this->temp_dir = './temp';
// 创建cookie 临时文件
$this->cookie_file = tempnam($this->temp_dir,'cookie');
}
/**
* 数据发送函数
* @access public
* @param string $url 请求地址
* @param array $data 要发送的数据
* @param boolean $send_cookie 是否要发送cookie 文件
* @param boolean $pus_cookie 是否要写入cookie 文件
* @param boolean $is_post 是否是post方式发送 默认是get方式发送
* @param Integer $time_out 超时时间
* @return array 返回获得的数据
*/
public function httpQuery($url, $data=array(), $send_cookie=true, $pus_cookie=true, $is_post=false, $time_out=30){
if(empty($url)){
return false;
}
$ch = curl_init();
// 判断是否要发生数据
if(!empty($data)){
if($is_post){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
}else{
$data = http_build_query($data);
curl_setopt($ch,CURLOPT_URL,$url."?".$data);
}
}else{
curl_setopt($ch,CURLOPT_URL,$url);
}
// 返回信息
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 发送cookie
if($send_cookie){
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_file);
}
// 记录cookie
if($pus_cookie){
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_file);
}
// 设置超时时间
curl_setopt($ch, CURLOPT_TIMEOUT,$time_out);
// 执行连接 获取数据
$res = curl_exec($ch);
// 关闭连接
curl_close($ch);
// 返回数组形式的数据
return json_decode($res,true);
}