curl实现get和post的一个比较好用的函数


1.curl的介绍
curl是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。下面将简单介绍介绍 cURL 的一些特性,以及在PHP中如何运用它。
2.基本结构的说明
(1)初始化
curl_init()
(2)设置变量
curl_setopt() 。最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。
(3)执行并获取结果
curl_exec()
(4)释放cURL句柄
curl_close()
3.下面就是curl实现get和post的一个比较好用的function

   function request($url, $params = array(), $method = 'POST', $extheaders = array(), $multi = false) {
        if (!function_exists('curl_init'))
            exit('Need to open the curl extension');
        $method = strtoupper($method);
        $ci = curl_init();
        //curl_setopt($ci, CURLOPT_USERAGENT, '***');
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 120);
        curl_setopt($ci, CURLOPT_TIMEOUT, 120);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ci, CURLOPT_HEADER, false);
        $headers = (array) $extheaders;
        switch ($method) {
            case 'POST':
                curl_setopt($ci, CURLOPT_POST, TRUE);
                if (!empty($params))
                {
                    if ($multi)
                    {
                        foreach ($multi as $key => $file) {
                            $params[$key] = '@' . $file;
                        }
                        curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
                        $headers[] = 'Expect: ';
                    }
                    else
                    {
                        curl_setopt($ci, CURLOPT_POSTFIELDS, http_build_query($params));
                    }
                }
                break;
            case 'DELETE':
            case 'GET':
                $method == 'DELETE' && curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
                if (!empty($params))
                {
                    $url = $url . (strpos($url, '?') ? '&' : '?')
                            . (is_array($params) ? http_build_query($params) : $params);
                }
                break;
        }
        curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE);
        curl_setopt($ci, CURLOPT_URL, $url);
        if ($headers)
        {
            curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
        }

        $response = curl_exec($ci);
        curl_close($ci);
        return $response;
    }

附录部分:
CURLOPT_USERAGENT 在HTTP请求中包含一个”User-Agent: “头的字符串。
CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。
CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。
CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证。
使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录。
如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,
CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
CURLINFO_HEADER_OUT 发送请求的字符串
CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出。
CURLOPT_CUSTOMREQUEST 使用一个自定义的请求信息来代替”GET”或”HEAD”作为HTTP请求。这对于执行”DELETE” 或者其他更隐蔽的HTTP请求。有效值如”GET”,”POST”,”CONNECT”等等。也就是说,不要在这里输入整个HTTP请求。例如输入”GET /index.html HTTP/1.0 “是不正确的。

以上附录部分是 curl部分设置选项的说明,想了解和学习更多,可以参考
PHP: cURL – Manual.

, , , ,

发表评论

8 + 6 = ?